任何人都可以通过更换PFM块使这个打印"4"?
my %hash;
$hash{1}{2}{3}=4;
my @key=qw(1 2 3);
my $key;
for(@key){PFM}
print $hash{$key}
Run Code Online (Sandbox Code Playgroud)
my %hash;
$hash{1}{2}{3}=4;
my @key=qw(1 2 3);
my $data = \%hash;
for(@key){
$data = $data->{$_}
}
print $data
Run Code Online (Sandbox Code Playgroud)
my $val = \%hash;
$val //= $val->{$_} for @key;
say $val;
Run Code Online (Sandbox Code Playgroud)
或者您可以使用Data :: Diver
use Data::Diver qw( Dive );
say Dive(\%hash, @key);
Run Code Online (Sandbox Code Playgroud)
如果密钥的任何部分不存在,任何一个版本都不会活跃.
如果要使用这样的键设置值:
my $p = \\%hash;
$p = \( $$p->{$_} ) for @key;
$$p = 5;
Run Code Online (Sandbox Code Playgroud)
要么
use Data::Diver qw( DiveRef );
my $ref = DiveRef(\%hash, map \$_, @key);
$$ref = 5;
Run Code Online (Sandbox Code Playgroud)
要么
use Data::Diver qw( DiveVal );
DiveVal(\%hash, map \$_, @key) = 5;
Run Code Online (Sandbox Code Playgroud)
(map \$_,需要使Data :: Diver为数字键创建哈希而不是数组.)