如果我有一个数组引用,我该怎么做:
splice($array, 0, $num);
因为根据文档,不应在数组引用上使用splice?
更新:我的问题是我在数组引用中进行拼接,我在函数中传递,因此退出时数组不会被修改。
更新
如果我这样做splice(@$array, 0 ,$num)
这会打破不在拼接中使用数组引用的建议吗?我很困惑。这段代码适用于我(对于我在函数中传递的数组引用而且我拼接)但我不确定@ $数组是否针对文档
答案 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
哦,你实际上很有可能直接拼接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);