perl - 如何从嵌套级别未知的嵌套哈希中提取值?

标签 perl recursion hash

当嵌套级别数量未知时,遍历嵌套哈希结构以获取值的最佳方法是什么?

例如,散列可以是以下任何一个或任何级别的嵌套。

my $hash = { 'known' => { 'a' => { 'b' => 'value' } } };

my $hash = { 'known' => { 'a' => { 'b' =>  { 'c' => 'value' } } } };

my $hash = { 'known' => { 'a' => { 'b' =>  { 'c' => { 'd' => 'value' } } } } };

下面的键 a、b、c 可以是任意值。

我想我可以用一个递归函数来做到这一点,该函数提取键和值以及当前级别,检查该值是否是对的引用 一个哈希值,如果是的话,它会调用自身,否则我有这个值?

最佳答案

易于阅读的方法:

#!/usr/bin/env perl
use strict;
use warnings;

my $hash = { 'known' => { 'a' => { 'b' => 'value' } } };
print get_deep_values($hash);

sub get_deep_values {
    my $hash = shift;
    if (ref($hash) eq 'HASH') {
        get_deep_values( (values %$hash)[0] )
    }
    else {
        return $hash;
    }
}

输出:

value

关于perl - 如何从嵌套级别未知的嵌套哈希中提取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022672/

相关文章:

mysql - 使用 Perl DBD 访问 MySQL 数据库 :ODBC

perl - split() 但保留分隔符

linux - 如何从脚本添加/替换命令到 SSH 公钥的末尾?

c++ - 在其函数定义中使用相同的函数?

编译期间找不到 C++ 函数

c++ - boost::hash_combine 中的魔数(Magic Number)

math - 密码散列函数是否达到每个可能的值,即它们是否是宾语?

perl - 使用 CGI 时如何在 perl 中获取 HTTP header

python - 我正在尝试创建一个从嵌套列表返回 max 的函数?

c - 用C递归计算整数sqrt