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