Perl 动态/符号函数参考

Dev*_*lar 2 perl reference

给定包名称$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()

ike*_*ami 5

你所需要的只是这个:

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 );)禁止,但\&可以豁免。