给定包名称$package和该包内的函数名称$function,我可以创建对该函数的引用:
my $ref = eval( "\\&${package}::${function}" );
Run Code Online (Sandbox Code Playgroud)
作为一个完整的例子:
#!/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->();
Run Code Online (Sandbox Code Playgroud)
我不太喜欢eval()那里的内容,想知道如果没有 ,是否可以达到相同的结果eval()?
你所需要的只是这个:
my $ref = \&{ "${package}::$name" };
Run Code Online (Sandbox Code Playgroud)
或者
my $ref = \&{ $package . "::" . $name };
Run Code Online (Sandbox Code Playgroud)
在需要变量名称的情况下使用生成变量名称的表达式称为符号引用。这些通常被use strict;(特别是use strict qw( refs );)禁止,但\&可以豁免。