$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; } }';
これにより、文字列内のコードが評価され、サブ参照である結果が返されます。これらの文字列がどこから来ているのか非常に注意してください。それらを作成する人は誰でも、あなたのプログラムを好きなようにさせることができます。