给定一个名为$package
的包和一个名为$function
的包中的函数,我可以创建一个对该函数的引用:
my $ref = eval( "\\&${package}::${function}" );
完整示例:
#!/usr/bin/perl -w
use strict;
package foo;
sub func()
{
print "foo::func\n";
}
package main;
my $package = "foo";
my $function = "func";
my $ref = eval( "\\&${package}::$function" );
$ref->();
我不太喜欢这里的eval()
,我想知道如果没有eval()
,是否也能达到同样的结果?
2条答案
按热度按时间7kjnsjlb1#
你所需要的就是:
或
使用一个表达式产生一个变量的名字,而这个表达式需要一个变量名,这被称为符号引用。这些通常被
use strict;
禁止(特别是use strict qw( refs );
),但是\&
是例外。roejwanj2#
使用字符串来引用子例程通常不是正确的方法。如果你这样做,你很可能做错了什么。你可以使用代码引用来存储函数的引用,以标量或散列的形式。散列允许你通过字符串输入来正确地查找代码引用。
输出量: