解説希望。 よくわかりません。
複数パッケージを含む以下のようなperlスクリプトで(&)プロトタイプ宣言した関数を実行すると、動きません。(Can’t call method ‘fuga’ without a package or object….)
package hoge;
use base 'Exporter';
our @EXPORT = qw/ fuga foo/;
sub fuga(&){ print $_[0]->();}
sub foo(){ print $_[0];}
1;
package main;
import hoge;
# 駄目パターン
fuga {'fuga'};
#プロトタイプ宣言(&)してないやつはOK
foo('foo');
#関数として渡すとOK
fuga(sub{'fuga'});
プロトタイプで’&’を指定した場合、subをつけない無名関数(ブロック)を渡せるはずですが、渡せません。
で、package hogeを別ファイルに置くと、動きます。
use 'hoge'
fuga {'fuga'}; #OK
なんか変だなぁ。
importとuseは違うのかなぁ?
なんか間違ってる?
ツイート