忽略这一事实,如果使用严格和警告,这种情况可能不会发生,我想知道这两种情况为什么不同。
#!/usr/local/perl5/bin/perl
$x[0] = "";
$y[0] = "";
$x[0]->{name} = "SRV";
$y[0]->{name} = "FINAL";
print "$x[0]->{name}, $y[0]->{name}\n";
$x[1]->{name} = "SRV";
$y[1]->{name} = "FINAL";
print "$x[1]->{name}, $y[1]->{name}\n";输出为:
FINAL, FINAL
SRV, FINAL为什么当索引为零时,y->{name}赋值会影响x->{name},而当索引为1时却不会?
谢谢,
肖恩。
发布于 2012-06-06 04:43:29
这不是你实际运行的代码。在您所展示的代码中,$x[0]和$y[0]是对不同散列的引用,但是在有问题的代码中,$x[0]和$y[0]是对相同散列的引用。如以下代码所示:
my %hash = { name => "SRV" };
$x[0] = \%hash; # $x[0] is a reference to %hash.
$y[0] = $x[0]; # $y[0] is a reference to %hash.
$y[0]->{name} = "FINAL"; # Changes $hash{name}.
print $x[0]->{name}; # Prints $hash{name}.
print $y[0]->{name}; # Prints $hash{name}.上述问题可以通过更改
$y[0] = $x[0];至
$y[0] = { %{ $x[0] } };或
use Storable qw( dclone );
$y[0] = dclone( $x[0] );https://stackoverflow.com/questions/10904190
复制相似问题