使用反射用perl传递参数

时间:2011-08-16 16:36:42

标签: perl reflection

我有以下Perl模块:

package module 

sub test1{
  my @data=@_
  print @data;
}

当我使用以下命令从Perl脚本调用此模块时:

my $test='test1';
my $full_name = "Module::" . $test; 
my @data=(1,2,3)

no strict 'refs'; 
$full_name->(@data);

我在stdout上没有结果,但我预计1,2,3。有人能解释一下原因吗?

1 个答案:

答案 0 :(得分:1)

听起来您没有正确设置模块。

运行以下自包含脚本会产生正确的结果:

{package Module;
    sub test1 {print "test1: @_\n"}
}

my $test = 'test1';
my $full_name = 'Module::'.$test;
my @data = (1, 2, 3);

no strict 'refs';

$full_name->(@data);  # test1: 1 2 3

如果没有确切地知道您拥有的内容,很难说清楚,但您可能忘记在模块的顶部添加package Module;行。该包不是通过文件名隐式设置的,您必须将其声明在文件的顶部。