将数组展开到perl中的参数列表

时间:2012-09-03 13:21:44

标签: perl arguments perl-module

我有类似下面的代码

my @array = ["hello","hi","fish"];
sub this_sub {
  my $first = $_[0];
  my $second = $_[1];
  my $third = $_[2];
}
this_sub(@array);

如何将数组扩展为参数列表以便这样做 first,second和third将从数组中的字符串中获取值。如下。

  • first =“hello”
  • second =“hi”
  • third =“fish”

2 个答案:

答案 0 :(得分:5)

你的代码错了。要将列表分配给数组,请将其括在正常的括号中:

my @array = ("hello", "hi", "fish");

方括号定义一个匿名数组,即对列表的引用,这是一个标量:

my $array_ref = ["hello", "hi", "fish"];

如果要发送引用,则必须在sub:

中取消引用它
sub this_sub {
    my ($first, $second, $third) = @{ $_[0] };
}

答案 1 :(得分:1)

将数组扩展到参数列表有时是有益的,因为通常无法访问相关子例程。这是我的解决方案。

sub test_sub($$$) {
    my ($a,$b,$c) = @_;
    say "$a $b $c";
}
my @array = ('happy', 'birthday', 'to you');
my $eval_str = 'test_sub(' join ', ', @array . ')';
eval $eval_str;

有些丑陋,希望其他人可以建议改进版本。