任何人都可以通过更换PFM块来打印“4”吗?
my %hash;
$hash{1}{2}{3}=4;
my @key=qw(1 2 3);
my $key;
for(@key){PFM}
print $hash{$key}
答案 0 :(得分:5)
my %hash;
$hash{1}{2}{3}=4;
my @key=qw(1 2 3);
my $data = \%hash;
for(@key){
$data = $data->{$_}
}
print $data
答案 1 :(得分:5)
my $val = \%hash;
$val //= $val->{$_} for @key;
say $val;
或者您可以使用Data::Diver
use Data::Diver qw( Dive );
say Dive(\%hash, @key);
如果密钥的任何部分不存在,任何一个版本都不会生存任何内容。
如果要使用这样的键设置值:
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 \$_,
才能使Data :: Diver为数字键设置哈希值而不是数组。)
答案 2 :(得分:0)
是。但它可能不是你想要的:
$key = "X";
$hash{X} = 4;
4最初不是%hash的值:
my @fours = grep $_ == 4, values %hash;
print "[@fours]\n"; # prints '[]'