如何在perl中创建动态子例程名称

时间:2016-02-08 13:53:43

标签: perl function subroutine

我想在perl中创建一个动态子例程名称,这是试用代码,我收到错误"在feed_load之后出现错误名称::"

#!/usr/bin/perl
use strict;
use warnings;

BEGIN {
      push @INC, '/freespace/attlas/data/bin/genericLoader /FeedLoaderLib/'
}

use feed_load;
my type ="L";
my $tempTablefunct  = "Create".$type."Temp_Table";

feed_load::&$tempTablefunct->($tablename); ### pass a dynamic sub name HERE ###

1 个答案:

答案 0 :(得分:7)

&{ $pkg_name."::".$sub_name }(@args)

( $pkg_name."::".$sub_name )->(@args)

然而,这些都会失败,因为您要求Perl禁止您通过在程序中放置use strict;来执行此操作。您可以在本地停用use strict;

my $ref = do { no strict 'refs'; \&{ $pkg_name."::".$sub_name } };
$ref->(@args)

但事实证明\&$sub_name已经免于限制。

my $ref = \&{ $pkg_name."::".$sub_name };
$ref->(@args)

如果不是子调用,则需要方法调用,可以使用

my $ref = $o->can($method_name);
$o->$ref(@args)

或只是

$o->$method_name(@args)