拼接数组引用

时间:2014-12-16 08:42:34

标签: arrays linux perl splice

如果我有一个数组引用,我该怎么做: splice($array, 0, $num);因为根据文档,不应在数组引用上使用splice?
更新:我的问题是我在数组引用中进行拼接,我在函数中传递,因此退出时数组不会被修改。

更新
如果我这样做splice(@$array, 0 ,$num)这会打破不在拼接中使用数组引用的建议吗?我很困惑。这段代码适用于我(对于我在函数中传递的数组引用而且我拼接)但我不确定@ $数组是否针对文档

2 个答案:

答案 0 :(得分:3)

在derefenced arrayref上使用它:

my $arr = [1,2,3];
splice @$arr, 0, 1, 3, 4;
print join '-', @$arr; # 3-4-2-3

这实际上与join的方法相同 - 当在arrayref上使用时,只需取消引用它。

它显然在sub中的工作方式相同:

sub splice_it {
  splice @{$_[0]}, 0, 1, 3, 4;
}

my $arr_ref = [1,2,3];
splice_it $arr_ref;
print join '-', @$arr_ref; # still 3-4-2-3

Demo


哦,你实际上很有可能直接拼接arrayrefs (没有derefencing) - 但请just don't

  

从Perl 5.14开始,splice可以采用必须保持的标量EXPR   对未经处理的数组的引用。该论点将被解除引用   自动。拼接的这个方面被认为是高度的   实验。确切的行为可能会在将来的版本中发生变化   的Perl。

     

避免混淆您之前运行的代码的潜在用户   Perl的版本带有神秘的语法错误,就是这样的事情   在文件的顶部,表示您的代码仅适用于您的代码   最近年份的Perls:

use 5.014;    # so push/pop/etc work on scalars (experimental)

它仍然存在:与use 5.020;

相同的行为

答案 1 :(得分:1)

您应取消引用数组引用(@$array@{$array}),

splice(@$array, 0, $num);