wantarrayは演算子?それとも関数?
とある古いPerlの本を読みながらlocalの記述だったり、
いろんなTipsを読んで復習していたら、いろんな発見があって勉強になった。
ちなみに、とある古い本とは以下の本で、
この本では、「wantarray演算子」って記述されてた。
結論から言うと、どっちでも良くて、
sub foo {...}は、foo();でも、foo;でも呼べるし、
wantarrayをMacのターミナルで調べる時は、
$ perldoc -f wantarray
だし、
wantarray – perldoc.jpでは関数扱いだし、
多数決で関数ってことでいんじゃないですかね。
あ、じゃぁ、自分は演算子に1票入れるので、
どっち付かずということで。
と、まぁ、冗談はさておき、sub foo {...}をfoo;で呼ぶには条件があって、
foo;で呼ぶ場合は、すでに定義されている必要がある。
use strict;
use warnings;
sub foo {
return 1;
}
print foo, "\n";
print foo(), "\n";
結果は、この通り問題ない。
$ perl aaa.pl
1
1
これならどうだろう?
use strict;
use warnings;
print foo(), "\n";
sub foo {
return 1;
}
もちろん、大丈夫。
$ perl bbb.pl
1
じゃぁ、これは?
use strict;
use warnings;
print foo, "\n";
sub foo {
return 1;
}
これは条件を満たしてないのでダメ。
$ perl ccc.pl
No comma allowed after filehandle at ccc.pl line 4.
という訳で、好きなように書いても良いけど、
foo;みたいな書き方は、先に定義されてないとダメだよ、ってお話でした。
おしまい。
Leave a Comment