【发布时间】:2015-08-14 02:55:35
【问题描述】:
我有一个哈希值
my %change;
while ( <DATA> ) {
chomp;
my ($gene, $condition, $change) = split;
$change{$gene}{$condition} = $change;
}
print Dumper \%change;
__DATA__
gene1 condition1 10
gene2 condition1 0.5
gene3 condition1 1.5
gene1 condition2 2
gene2 condition2 13.5
gene3 condition2 0.25
我想按值排序:
gene2 condition2 13.5
gene1 condition1 10
gene1 condition2 2
gene3 condition1 1.5
gene2 condition1 0.5
gene3 condition2 0.25
我正在使用:
for my $g (keys %change){
for my $con (keys $change{$g}){
for my $ch (sort { $change{$g}{$a} <=> $change{$g}{$b} } keys $change{$g}{$con} ) {
print "$g\t$con\t$ch\n";
}
}
}
但这不起作用,并产生错误
引用键的参数类型必须是 untitled.pl 第 23 行第 6 行的 unblessed hashref 或 arrayref。
第 23 行是
for my $ch (sort { $change{$g}{$a} <=> $change{$g}{$b} } keys $change{$g}{$con}){
谁能指出我正确的方向?
【问题讨论】:
-
该错误意味着包含在 - 我假设 -
$change{$g}中的值不是 hashref 或 arrayref。显示您正在使用的数据结构、分配方式或等效的可运行代码。 -
是的,在后来的 Perl 中,它会警告 hashref 上的键是实验性的。但这不是唯一的问题。如果你解决了这个问题,它会抱怨更多。
-
第 6 行是哪一行?
-
@fugu 如果您唯一关心的是根据文本每行中的数值进行排序,那么最好在收集数据时做好准备,而不是事后转换哈希。跨度>
-
您可能对纯 bash 解决方案感兴趣:stackoverflow.com/q/17430470/725418