在C#中,可以创建对引用类型的引用:
SomeObject origObj = new SomeObject();
SomeObject objRef = origObj;
origObj和objRef都指向同一个对象。
现在,在perl:
my @arr = (1,2,3);
method(\@arr);
sub method
{
my $arr_ref = shift;
foreach my $element (@{$arr_ref})
{
#...
}
}
我想在方法中使用“@myArr”,而不是每次都要投射:“@ {arr_ref}” - 并且在不创建数组副本的情况下执行此操作(因为我的“@myArr = @ {$ arr_ref}“将创建一个副本。”
总结一下:如何在不创建副本的情况下获得“@myArr = @ {arr_ref}”?
答案 0 :(得分:7)
如果您对@myArr
成为包变量(our
)而不是词汇变量(my
)感到高兴,您可以这样做:
our @myArr;
local *myArr = $arr_ref;
这将使@myArr像$ arr_ref所指向的数组的别名一样。
如果您需要@myArr
是词法,那么您可以使用Data::Alias:
use Data::Alias;
alias(my @myArr = @$arr_ref);
答案 1 :(得分:1)
Perl 5.22添加了“引用别名”或分配给引用,这正是您想要的:
library(DescTools)
DunnTest(Sepal.Width~Species, iris)
#
# Dunn's test of multiple comparisons using rank sums : holm
#
# mean.rank.diff pval
# versicolor-setosa -67.38 2.0e-14 ***
# virginica-setosa -46.50 1.5e-07 ***
# virginica-versicolor 20.88 0.0158 *
# ---
# Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1