我是Perl程序员初学者,我正在寻找有关上述代码的一些解释。该函数名为delete_depth_hash,但我无法理解它是如何工作的。
sub delete_depth_hash {
my (%hash_genotype_depth) = @_;
my %new_hash;
foreach my $geno(keys %hash_genotype_depth) {
foreach my $dep(keys %{$hash_genotype_depth{$geno}}) {
my $frequence = scalar($hash_genotype_depth{$geno}{$dep});
$new_hash{$geno} +=$frequence;
}
}
return %new_hash;
}
答案 0 :(得分:2)
行为可以用一个例子来解释:
use Data::Dumper;
print Dumper({ delete_depth_hash( a => { b => 1, c => 2 } ) });
输出:
$VAR1 = {
'a' => 3
};
因此,它基本上对数字进行求和,而不管哈希散列中的子键。请注意,scalar在此处不执行任何操作,因为哈希值必须始终为标量。
由于刚删除了内部核心,您可以使用List::Util sum
和values函数简化代码:
use List::Util qw{ sum };
sub delete_depth_hash {
my (%hash_genotype_depth) = @_;
my %new_hash;
for my $geno (keys %hash_genotype_depth) {
$new_hash{$geno} = sum(values %{ $hash_genotype_depth{$geno} });
}
return %new_hash;
}