如何在Perl中连接别名数组,以便生成的数组也包含别名?
我想出的解决方案是:
my ($x, $y, $z) = 1 .. 3;
my $a1 = sub {\@_}->($x);
my $a2 = sub {\@_}->($y, $z);
my $a3 = sub {\@_}->(@$a1, @$a2);
say "@$a3"; # 1 2 3
$_++ for $x, $y, $z;
say "@$a3"; # 2 3 4
我并不感到高兴的是要创建$a3
我必须完全解包$a1
和$a2
。对于短数组,这不是问题,但随着数据变大,这意味着别名数组上的所有数组操作都是O(n)
,包括传统的O(1)
操作,如push
或{{ 1}}。
unshift
可以提供帮助,但它不适用于最新版本的Perl。 Data::Alias
包含api原语Array::RefElem
和av_store
周围的包装器,可用于实现此功能。所以这样的事情可以起作用:
av_push
我很想知道是否还有其他方法。特别是如果有任何其他方式只使用核心模块。
答案 0 :(得分:1)
这是您在Perl中想要链接列表的情况吗? Steve Lembark has a talk关于人们应该重新考虑滚动和展开数组的各种情况。
我很好奇为什么你必须这样做。不是我怀疑有什么奇怪的;我只是对这个问题感到好奇。