如何在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
Run Code Online (Sandbox Code Playgroud)
什么我不是疯狂的是,创建$a3我必须完全解压$a1和$a2.对于短数组,这不是问题,但随着数据变大,这意味着对别名数组的所有数组操作都O(n)包括传统的O(1)操作,如push或unshift.
Data::Alias可以提供帮助,但它不适用于最新版本的Perl. Array::RefElem包含包装器的API原语av_store和av_push可用于实现这一功能.所以像这样的东西可以工作:
sub alias_push (\@@) {
if (eval {require Array::RefElem}) {
&Array::RefElem::av_push($_[0], $_) for @_[1 .. $#_]
} else {
$_[0] = sub {\@_}->(@{$_[0]}, @_[1 .. $#_])
}
}
Run Code Online (Sandbox Code Playgroud)
我很想知道是否有其他方法.特别是如果有任何其他方式仅使用核心模块.
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |