如何在Perl中连接别名数组?

时间:2010-10-07 18:32:36

标签: arrays perl alias

如何在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::RefElemav_store周围的包装器,可用于实现此功能。所以这样的事情可以起作用:

av_push

我很想知道是否还有其他方法。特别是如果有任何其他方式只使用核心模块。

1 个答案:

答案 0 :(得分:1)

这是您在Perl中想要链接列表的情况吗? Steve Lembark has a talk关于人们应该重新考虑滚动和展开数组的各种情况。

我很好奇为什么你必须这样做。不是我怀疑有什么奇怪的;我只是对这个问题感到好奇。