既にサブルーチンが定義されている必要がある。
&ありの場合は、その後に定義されていても問題ない。
use strict;
use warnings;
csrf;
sub csrf{
print "こんにちはこんにちは!\n"
}
&なしのサブルーチン呼び出しだと先に定義されていないと叱られる。
定義後に&なしのサブルーチン呼び出しならOK
use strict;
use warnings;
sub csrf{
print "こんにちはこんにちは!\n"
}
csrf;
ただし、&ありでサブルーチンを呼び出すのならば
サブルーチンの定義前後関係なく呼び出しOKとなる。
use strict;
use warnings;
&csrf;
sub csrf{
print "こんにちはこんにちは!\n"
}
これだけかと思ったら、
&のあるなしで、もっともっと微妙な違いがある。
(以下、ものすごい勢いで頭の片隅において置く…)
use strict;
use warnings;
@_ = qw(abc def);
sub csrf{
@_ ? print "@_\n" : print "こんにちはこんにちは!";
}
&csrf;
csrf;
この時の &csrf; と csrf; の違いは?
ということなんですが…
ひとまず、上記コードを実行してみます。
&csrf; は、&csrf(@_);と同義。
csrf; は、 csrf();と同義。
&付きサブルーチン呼び出しは、引数を
設定していない時は、@_を渡すようです。
当然ながら、@_を設定していなければ、csrf;の時
同様こんにちはこんにちは!って表示されます。
(※と、書いてあったものの@_に何か設定することってあるのかなぁ??)
0 件のコメント:
コメントを投稿