Perl将一部分哈希保存到新哈希

时间:2018-03-13 11:24:14

标签: linux perl

代码

use strict;
use warnings;

my $hash = {
    foo => {
        bar => {
                baz => "hi"
            }
        }
    };

my @arr = qw/foo bar/;

问题

在perl中是否有任何方法可以使用数组/哈希来指定密钥来构建哈希引用字符串/标识符?

所以使用上面的代码我想从@arr获取字符串并使用它们来生成字符串

my $newhash = $hash->{'foo'}->{'bar'};

这只是一个例子,嵌套哈希的数量可以是变量

尝试

所以我知道,如果我知道嵌套的水平,那么我可以使用

my $newhash = { map { $_ => $hash->{$_} } qw/some values/ };

但是当嵌套未知时,我似乎无法想出办法。

附加

perl 5.20

需要更多信息,请询问。

1 个答案:

答案 0 :(得分:1)

你需要走下哈希树。

#!/usr/bin/env perl

# always use these two
use strict;
use warnings;

# use autodie to automatically die on open errors
use autodie;

my $hash = {
    foo => {
        bar => {
                baz => "hi"
            }
        }
    };

my @arr = qw/foo bar/;

my $hash_ref = $hash;
for my $key ( @arr ){
    $hash_ref = $hash_ref->{$key};
}
# $hash_ref is now at the end of the array

print Dumper( $hash_ref );