如何在 perl 中创建动态子程序名称
How to create a dynamic subroutine name in perl
我想在 perl 中创建一个动态子程序名称,这是试用代码,我收到错误 "Bad name after 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 ###
&{ $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)
我想在 perl 中创建一个动态子程序名称,这是试用代码,我收到错误 "Bad name after 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 ###
&{ $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)