我正在尝试使用包含在字符串中的perl中的sub.
目前我有类似的东西
$sub = "sub{ my $in = shift; if($in =~ /bla.*wam/){return 1;}}";
Run Code Online (Sandbox Code Playgroud)
我尝试通过这样做来使用它
$sub->("test");
Run Code Online (Sandbox Code Playgroud)
要么
&{$sub}->("test");
Run Code Online (Sandbox Code Playgroud)
上面的两个例子只是吐出整个函数,好像它是一个它找不到的sub的名字.它看起来像这样:
Undefined subroutine [function then printed here]
Run Code Online (Sandbox Code Playgroud)
我在这里弄错了什么?
让我们说标量$sub
包含字符串"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; } };
Run Code Online (Sandbox Code Playgroud)
然后像这样执行: $sub->("test");
如果你真的需要在字符串中执行代码,那么你可以使用eval
.
my $sub = eval 'sub{ my $in = shift; if($in =~ /bla.*wam/) { return 1; } }';
Run Code Online (Sandbox Code Playgroud)
这将评估字符串中的代码并返回结果,这是一个子引用.在这些字符串来自哪里时要非常小心.制作它们的人可以让你的程序做任何他们想做的事.
归档时间: |
|
查看次数: |
100 次 |
最近记录: |