我想从散列哈希得到价值,但我不知道。我的代码是:
sub test {
my $filename = $_[0];
open INFILE, ${filename} or die $!;
my %hashCount;
my @firstline = split('\t',<INFILE>);
shift(@firstline);
while (my $line = <INFILE>)
{
my %temp;
chomp($line);
my @line = split('\t', $line);
foreach my $cpt (1..$#line) {
$temp{$firstline[$cpt-1]}=$line[$cpt];
}
$hashCount{$line[0]}={%temp};
}
return %hashCount;
}
sub get_hash_of_hash {
my $h = shift;
foreach my $key (keys %$h) {
if( ref $h->{$key}) {
get_hash_of_hash( $h->{$key} );
}
else {
say $h->{$key};
}
}
}
当我显示我的哈希时:
$VAR10679 = 'M00967_43_1106_2493_14707';
$VAR10680 = {
'A' => '1',
'B' => '0',
'C' => '1',
'D' => '0',
'E' => '0'
};
我的第一个函数返回哈希哈希值,我用第二个函数得到我的特定值。 所以我希望得到这样的价值:
my %hashTest = test("FILE.txt");
get_hash_of_hash(%hashTest,"M00967_43_1106_2493_14707","A")
//return value '1'
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以访问
等嵌套元素$hash{keyA}{keyB}
或者我们可以编写一个遍历数据结构的函数,比如
sub walk {
my ($hashref, @keys) = @_;
my $pointer = $hashref;
for my $key (@keys) {
if (exists $pointer->{$key}) {
$pointer = $pointer->{$key};
} else {
die "No value at ", join "->", @keys;
}
}
return $pointer;
}
可以像
一样使用my %hash = (
'M00967_43_1106_2493_14707' => {
'A' => '1',
'B' => '0',
'C' => '1',
'D' => '0',
'E' => '0'
},
);
say walk(\%hash, 'M00967_43_1106_2493_14707', 'A');
注意:使用Data :: Dumper时,将引用传递给Dump
函数:
print Dump \%hash; # not print Dump %hash
这是显示正确数据结构的必要条件。
答案 2 :(得分:0)
使用此子程序..
sub get_hash_of_hash {
my $h = shift;
foreach my $key (keys %$h) {
if( ref $h->{$key}) {
get_hash_of_hash( $h->{$key} );
}
else {
print $h->{$key};
}
}
}