使用Perl中的单个命令将元素添加到多个数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Perl中的单个命令将元素添加到多个数组相关的知识,希望对你有一定的参考价值。
我可以使用push in perl将元素添加到多个数组吗?
EG
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
答案
推送ARRAY,LIST
通过将LIST的值附加到ARRAY的末尾来将ARRAY视为堆栈。 ARRAY的长度增加了LIST的长度。具有相同的效果
for my $value (LIST) $ARRAY[++$#ARRAY] = $value;
但效率更高。返回完成推送后数组中元素的数量。
从Perl 5.14开始,一个实验性功能允许push采用标量表达式。该实验被认为是不成功的,并且从Perl 5.24开始被删除。
所以不行。 push()
一次只能使用一个阵列。
你的解决方案
push (@arr1,@arr2), "extra";
将@arr2
的所有元素添加到@arr1
结尾的效果。 “额外”将被忽略,因为右括号将被视为结束push()
的参数列表。在use warnings
下你会得到一个警告说:
在void上下文中无用的常量(“额外”)
您可以通过使用两次调用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");
以上是关于使用Perl中的单个命令将元素添加到多个数组的主要内容,如果未能解决你的问题,请参考以下文章
Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?