我是一名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;
} 发布于 2017-03-10 19:09:10
这种行为可以用一个例子来解释:
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;
}https://stackoverflow.com/questions/42716783
复制相似问题