如何在Perl中引用特定的哈希值?

时间:2010-03-25 04:37:10

标签: perl hash reference dereference

如何在特定哈希键中创建对值的引用。我尝试了以下但是$$ foo是空的。非常感谢任何帮助。

$hash->{1} = "one";
$hash->{2} = "two";
$hash->{3} = "three";

$foo = \${$hash->{1}};
$hash->{1} = "ONE";

#I want "MONEY: ONE";
print "MONEY: $$foo\n";

3 个答案:

答案 0 :(得分:8)

use strict;
use warnings;
my $hash;

$hash->{1} = "one";
$hash->{2} = "two";
$hash->{3} = "three";

my $foo = \$hash->{1};
$hash->{1} = "ONE";
print "MONEY: $$foo\n";

答案 1 :(得分:5)

启用严格和警告,你会得到一些关于出错的线索。

use strict;
use warnings;

my $hash = { a => 1, b => 2, c => 3 };
my $a = \$$hash{a};
my $b = \$hash->{b};

print "$$a $$b\n";

一般来说,如果你想用切片或者参加refs 做一些事情,你必须使用旧式,堆叠的sigil语法来获得你想要的东西。如果你不记得堆积的sigil语法细节,你可能会发现References Quick Reference方便。

<强>更新

正如 murugaperumal 所指出的那样,你可以做my $foo = \$hash->{a};我可以发誓我试过了它并且它不起作用(令我惊讶)。我会把它归咎于疲劳使我变得更加愚蠢。

答案 2 :(得分:0)

是经典之作,但是在您同时说明这两种情况之前,这些示例似乎并不完整

use strict;
use warnings;

my $hash = { abc => 123 };
print $hash->{abc} . "\n"; # 123 , of course

my $ref = \$hash->{abc};
print $$ref . "\n"; # 123 , of course

$hash->{abc} = 456;
print $$ref . "\n"; # 456 , change in the hash reflects in the $$ref

$$ref = 789;
print $hash->{abc} . "\n"; # 789 , change in the $$ref also reflects in the hash

PS:尽管是一个老话题,但我还是决定扔掉我的两分钱,因为我以前看过这个问题