任何人都可以通過替換PFM塊使此打印「4」?散列元素的編程訪問
my %hash;
$hash{1}{2}{3}=4;
my @key=qw(1 2 3);
my $key;
for(@key){PFM}
print $hash{$key}
任何人都可以通過替換PFM塊使此打印「4」?散列元素的編程訪問
my %hash;
$hash{1}{2}{3}=4;
my @key=qw(1 2 3);
my $key;
for(@key){PFM}
print $hash{$key}
my %hash;
$hash{1}{2}{3}=4;
my @key=qw(1 2 3);
my $data = \%hash;
for(@key){
$data = $data->{$_}
}
print $data
這就是我錯過的!我的$ data = \%散列;是整個事情的關鍵。優秀作品! – Hawk 2011-12-29 18:00:39
my $val = \%hash;
$val //= $val->{$_} for @key;
say $val;
或者你可以使用Data::Diver
use Data::Diver qw(Dive);
say Dive(\%hash, @key);
如果鍵的任何部分不存在,無論是版本將vivify什麼。
如果你想使用這樣的鍵設置值:
my $p = \\%hash;
$p = \($$p->{$_}) for @key;
$$p = 5;
或
use Data::Diver qw(DiveRef);
my $ref = DiveRef(\%hash, map \$_, @key);
$$ref = 5;
或
use Data::Diver qw(DiveVal);
DiveVal(\%hash, map \$_, @key) = 5;
(該map \$_,
需要使數據::潛水員做哈希而不是陣列ys爲數字鍵)
這非常有趣和有用。我也投了贊成票。謝謝! – Hawk 2011-12-29 18:15:05
是的。但是,這可能不是你想要的東西:
$key = "X";
$hash{X} = 4;
4不在%哈希原來的值:
my @fours = grep $_ == 4, values %hash;
print "[@fours]\n"; # prints '[]'
號因爲$關鍵的時候有民主基金的價值,你得到的打印聲明。 – tadmc 2011-12-29 17:50:33
不可以,因爲您不是試圖從%hash獲取值。 (@tadmc所說的沒有任何意義,PFM可以將'$ key'設置爲undef以外的內容。) – ikegami 2011-12-29 18:04:08
如何刪除對SO的評論? – tadmc 2011-12-30 02:57:04