特定のハッシュ キーの値への参照を作成するにはどうすればよいですか。以下を試してみましたが、$$foo が空です。どんな助けでも大歓迎です。
$hash->{1} = "one";
$hash->{2} = "two";
$hash->{3} = "three";
$foo = \${$hash->{1}};
$hash->{1} = "ONE";
#I want "MONEY: ONE";
print "MONEY: $$foo\n";
特定のハッシュ キーの値への参照を作成するにはどうすればよいですか。以下を試してみましたが、$$foo が空です。どんな助けでも大歓迎です。
$hash->{1} = "one";
$hash->{2} = "two";
$hash->{3} = "three";
$foo = \${$hash->{1}};
$hash->{1} = "ONE";
#I want "MONEY: ONE";
print "MONEY: $$foo\n";
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";
strictとwarningsをオンにすると、何が問題になっているのかについていくつかの手がかりが得られます。
use strict;
use warnings;
my $hash = { a => 1, b => 2, c => 3 };
my $a = \$$hash{a};
my $b = \$hash->{b};
print "$$a $$b\n";
一般に、スライスを使用したり、参照を取得したりする場合は、古いスタイルの積み上げられたシジル構文を使用して、必要なものを取得する必要があります。積み上げられた印章の構文の詳細を思い出せない場合は、リファレンスクイックリファレンスが便利です。
アップデート
murugaperumalが指摘しているように、my $foo = \$hash->{a};
私はそれを試したがうまくいかなかったと誓うことができます(驚いたことに)。私はそれを倦怠感にまでチョークで書き、私をさらに愚かにします。
古典的ですが、両方の方法で説明するまで、例は完全ではないようです
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: 古いトピックであるにもかかわらず、以前にこの同じ質問にアクセスしたことがあるのを見て、私は 2 セントを投げることにしました。