在以下 C# 代码中:
int[] X = new int[2];
X[0] = 1;
X[1] = 2;
int[] Y = X;
X[1] = 3;
执行后,Y[1] 也将为 3,因为操作 Y = X 不会进行克隆,而是将 X 所指向的引用或指针分配给 Y。
如果在 Perl 5 下尝试相同的操作:
my @X = (1, 2);
my @Y = @X;
$X[1] = 3;
与 C# 不同,Y[1] 不是 3,而是 2,这表明 Perl 在 @Y = @X 操作之后复制了数组。
所以,我的问题是 - 有没有办法使用另一个 Perl 数组的引用来分配或初始化 Perl 5 数组,以便它们都指向相同的数据?我已经了解引用并尝试取消引用对数组的引用,但这也会生成副本。我还知道使用对数组的引用将解决我想要做的大部分事情,因此我不需要任何显示如何使用引用的答案。
您在 C# 程序中使用引用,但不在 Perl 程序中使用。如果您在 Perl 中使用引用,它的工作原理是相同的。
my $X = [ 1, 2 ];
my $Y = $X;
$X->[1] = 3;
print "@$Y\n"; # 1 3
or
my @X = ( 1, 2 );
my $Y = \@X;
$X[1] = 3;
print "@$Y\n"; # 1 3
您还可以创建别名。
use Data::Alias qw( alias );
my @X = ( 1, 2 );
alias my @Y = @X;
$X[1] = 3;
print "@Y\n"; # 1 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)