我正在尝试在perl中创建一个可管理的代码。我希望有一个这样的设置,以便我可能有很多信息的数组中的最后一个值可以将最后一个值分配给$ d。我仍然希望能够在未来的时间为我的阵列扩展提供空间
($ a,$ b,$ c,@ rest,$ d)=(1,2,3,5,1,4,5,6,8,5,2,..... 4, 7)
我希望$ d等于最后一个值(7)。但是,我仍然想要一种情况,我将来能够在将来添加一个变量$ e,它将再次保存新的最后一个值。如下
($ a,$ b,$ c,@ rest,$ d,$ e)=(1,2,3,5,1,4,5,6,8,5,2,.... .4,7,8)
然后$ d仍然保持为7而$ e将变为8.我知道使用变量@rest将占用我的数组中的所有其余值。我正在寻找一种简单的方法来提取我需要的变量,这些变量附加在我的数组的末尾。感谢
答案 0 :(得分:3)
您可以先填充@rest,然后使用pop从结尾提取值。按相反顺序执行此操作:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
my ($A, $B, $c, @rest) = (1, 2, 3, 5, 1, 4, 5, 6, 8, 5, 2, 4, 7);
my $e = pop @rest;
my $d = pop @rest;
say "@rest | $d $e";
或者,使用splice,但您必须手动计算变量:
my ($d, $e) = splice @rest, -2;
答案 1 :(得分:1)
或者您可以使用数组引用(下面为$ra
)代替匿名数组([...]
)
use warnings;
use strict;
use feature 'say';
my ($v1, $v2, $ra, $e) = (2, 4, [10..12], 5);
say for ($v1, $v2);
say "@$ra";
say $e;
然后你可以根据自己的意愿来处理其他变量。
这当然要求您可以将输入的一部分分成匿名数组。
如果您不能这样做,另一个可管理的选项是首先为数组变量赋值,然后通过索引/切片(@ary[0,1,2..4]
等)和/或{{1 }}
输入的“第一”部分(以数组结尾)似乎不会改变。然后提取,以便只留下将来可能增长的数据
pop
这样可以最大限度地减少代码更改,仅处理未来数据。
如果第一部分发生变化,那么就没有一个好的解决方案;你可能想重新考虑一下这个设计。
请注意,将新数据分配给单个变量并不是一种非常易于管理的方法。