$sub
スカラーに string が含まれていたとしましょう"foobar"
。次に と言うと、という名前$sub->()
のサブルーチンを呼び出そうとしています。そのサブルーチンが存在しない場合は、エラーが発生します。 foobar
という名前のサブルーチンを呼び出そうとしていますがsub{ my $in = shift; if($in =~ /bla.*wam/){return 1;}}
、これは完全にばかげたサブルーチンの名前であり、明らかにプログラムには存在しません。(そして実際には、二重引用符で囲まれているため、$in
気付かないうちに何かとして補間されている可能性があります。)
ですから、まずそうしないでください。
無名サブルーチンが必要な場合は、次のようにします。
my $sub = sub { my $in = shift; if($in =~ /bla.*wam/) { return 1; } };
次に、次のように実行します。$sub->("test");
本当に文字列内のコードを実行する必要がある場合は、 eval
.
my $sub = eval 'sub{ my $in = shift; if($in =~ /bla.*wam/) { return 1; } }';
これにより、文字列内のコードが評価され、サブ参照である結果が返されます。これらの文字列がどこから来ているのか非常に注意してください。それらを作成する人は誰でも、あなたのプログラムを好きなようにさせることができます。