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

cha*_*aya 2 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 ###
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 7

&{ $pkg_name."::".$sub_name }(@args)
Run Code Online (Sandbox Code Playgroud)

要么

( $pkg_name."::".$sub_name )->(@args)
Run Code Online (Sandbox Code Playgroud)

但是,这些都会失败,因为您要求Perl禁止您通过放入use strict;您的程序来执行此操作.您可以use strict;在本地禁用

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

但事实证明,这\&$sub_name已经不受限制.

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

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

my $ref = $o->can($method_name);
$o->$ref(@args)
Run Code Online (Sandbox Code Playgroud)

要不就

$o->$method_name(@args)
Run Code Online (Sandbox Code Playgroud)