我有类似下面的代码
my @array = ["hello","hi","fish"];
sub this_sub {
my $first = $_[0];
my $second = $_[1];
my $third = $_[2];
}
this_sub(@array);
如何使数组扩展为参数列表,以便第一个、第二个和第三个将从数组中的字符串中获取值。如下所示。
- 第一个=“你好”
- 第二=“嗨”
- 第三=“鱼”
我有类似下面的代码
my @array = ["hello","hi","fish"];
sub this_sub {
my $first = $_[0];
my $second = $_[1];
my $third = $_[2];
}
this_sub(@array);
如何使数组扩展为参数列表,以便第一个、第二个和第三个将从数组中的字符串中获取值。如下所示。
你的代码是错误的。要将列表分配给数组,请将其括在普通括号中:
my @array = ("hello", "hi", "fish");
方括号定义了一个匿名数组,即一个列表的引用,它是一个标量:
my $array_ref = ["hello", "hi", "fish"];
如果要发送引用,则必须在子中取消引用它:
sub this_sub {
my ($first, $second, $third) = @{ $_[0] };
}
有时能够将数组扩展为参数列表是有益的,因为通常无法访问相关子例程。这是我的解决方案。
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;
这有点难看,希望其他人可以提出改进的版本。