首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl hashref/属性混淆

Perl hashref/属性混淆
EN

Stack Overflow用户
提问于 2012-06-06 04:09:05
回答 1查看 100关注 0票数 0

忽略这一事实,如果使用严格和警告,这种情况可能不会发生,我想知道这两种情况为什么不同。

代码语言:javascript
复制
#!/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";

输出为:

代码语言:javascript
复制
FINAL, FINAL
SRV, FINAL

为什么当索引为零时,y->{name}赋值会影响x->{name},而当索引为1时却不会?

谢谢,

肖恩。

EN

回答 1

Stack Overflow用户

发布于 2012-06-06 04:43:29

这不是你实际运行的代码。在您所展示的代码中,$x[0]$y[0]是对不同散列的引用,但是在有问题的代码中,$x[0]$y[0]是对相同散列的引用。如以下代码所示:

代码语言:javascript
复制
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}.

上述问题可以通过更改

代码语言:javascript
复制
$y[0] = $x[0];

代码语言:javascript
复制
$y[0] = { %{ $x[0] } };

代码语言:javascript
复制
use Storable qw( dclone );
$y[0] = dclone( $x[0] );
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10904190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档