Translate

2008年7月14日月曜日

サブルーチン名; と &サブルーチン名; の違いのメモ。

&なしでサブルーチンを呼び出す時は、
既にサブルーチンが定義されている必要がある。
&ありの場合は、その後に定義されていても問題ない。

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 件のコメント: