2016-02-08 36 views
2

我想在Perl中创建一个动态的子程序名,这里是审判代码,我如何在Perl中创建一个动态的子程序名

#!/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 ### 
+2

为什么你想这样做吗?这可能是一个坏主意。 – Sobrique

+0

其实我已经创建了动态子例程名称,例如:“CreateLTemp_Table”在这个'L'的地方也可以来'P',所以它变成了“CreatePTemp_Table”.. – chaya

回答

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

“feed_load ::后坏名声”得到错误或

($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) 
+0

感谢这个解决方案为我工作 – chaya

相关问题