我正在尝试创建哈希值的哈希值来唯一标识仅属于一组级别的数字。哈希结构看起来像这样:
my %gh = {
'Test1' => {
'level1a' => {
'level2b' => {
'level3a' => {
'level4a' => {
'level5' => '63'
}
}
}
}
}
};
遍历哈希值以便获得值 63 的最简单方法是什么?
我一直在使用:
my $x = '';
foreach my $l0 (%gh){
foreach my $l1 (%{$l0}){
foreach my $l2 (%$l1){
foreach my $l3 (%{$l2}){
foreach my $l4 (%$l3){
foreach my $l5 (%{$l4}){
$x = $l5;
}
}
}
}
}
}
这个过程似乎运行良好,但我只是在寻找更简单、更短的东西。
这适用于您的情况(仅哈希值和末尾的纯标量值)
sub hval {
my ($h) = @_;
return map { ref() ? hval($_) : $_ } values %$h;
}
my $gh = {
'Test1' => {
'level1a' => {
'level2b' => {
'level3a' => {
'level4a' => {
'level5' => '63'
}
}
}
}
}
};
my ($x) = hval($gh);
如果您使用对哈希的引用,则有一种方法:
use warnings;
use strict;
my $gh = {
'Test1' => {
'level1a' => {
'level2b' => {
'level3a' => {
'level4a' => {
'level5' => '63'
}
}
}
}
}
};
print $gh->{Test1}{level1a}{level2b}{level3a}{level4a}{level5}, "\n";
另请参阅:perldoc perldsc 和 Data::Diver