哈希元素的编程访问

Haw*_*awk 0 perl hash

任何人都可以通过更换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)

Bra*_*ert 5

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)


ike*_*ami 5

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为数字键创建哈希而不是数组.)