我可以使用push in perl将元素添加到多个数组中吗?
例如
my @arr1 = qw/one two three/;
my @arr2 = qw/four five six/;
push (@arr1,@arr2), "extra";
预期输出::
@arr1 = one two three extra
@arr2 = four five six extra
答案 0 :(得分:2)
推送数组,列表
通过附加的值将ARRAY视为堆栈 列出到ARRAY的末尾。 ARRAY的长度增加长度 的清单。与
具有相同的效果for my $value (LIST) { $ARRAY[++$#ARRAY] = $value; }
,但效率更高。返回完成推送后数组中元素的数量。
从Perl 5.14开始,一项实验功能允许用户进行推送 标量表达式。该实验被认为是失败的,并且 从Perl 5.24开始被删除。
所以,不。 push()
一次只能使用一个数组。
您的解决方案:
push (@arr1,@arr2), "extra";
具有将所有@arr2
元素添加到@arr1
末尾的效果。 “多余”将被忽略,因为右括号将被视为结束push()
的参数列表。在use warnings
下,您会看到一条警告:
在无效上下文中无用的常量(“多余”)
您可以通过两次调用push()
并将复杂性隐藏在子例程中来实现。天真的解决方案使用对数组的引用:
sub twopush {
my ($a1, $a2, @elems) = @_;
push @$a1, @elems;
push @$a2, @elems;
}
twopush(\@arr1, \@arr2, "extra");
但这是Perl的子例程原型很有用的少数情况之一。您可以告诉子例程前两个参数是数组,编译器将处理获取引用的情况。
sub twopush(\@\@@) {
my ($a1, $a2, @elems) = @_;
push @$a1, @elems;
push @$a2, @elems;
}
twopush(@arr1, @arr2, "extra");