我试图制作哈希值,以唯一地识别仅在一组级别下的数字。哈希结构看起来像这样:
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;
}
}
}
}
}
}
这个过程似乎工作正常。但我只是在寻找更简单,更短的东西;
提前致谢
答案 0 :(得分:2)
这将适用于您的情况(最后只有哈希值和普通标量值)
sub hval {
my ($h) = @_;
return map { ref() ? hval($_) : $_ } values %$h;
}
my $gh = {
'Test1' => {
'level1a' => {
'level2b' => {
'level3a' => {
'level4a' => {
'level5' => '63'
}
}
}
}
}
};
my ($x) = hval($gh);
答案 1 :(得分:1)
如果你使用对哈希的引用,这里有一种方法:
use warnings;
use strict;
my $gh = {
'Test1' => {
'level1a' => {
'level2b' => {
'level3a' => {
'level4a' => {
'level5' => '63'
}
}
}
}
}
};
print $gh->{Test1}{level1a}{level2b}{level3a}{level4a}{level5}, "\n";