【发布时间】:2015-04-28 13:59:49
【问题描述】:
我想知道如何从数组哈希中删除一个键。 以以下文件为例,第四列始终是配对匹配中的第三列,数据未排序。
....
NS501570 WWW 3009824 3009848
....
NS501572 WAD 3009848 3009898
....
我想把它折叠成
NS501570 WWW 3009824 3009848 NS501572 WAD 3009848 3009898
我写了以下代码。我选择第三列作为哈希键。因此我打印第一个条目中的值,第 4 列将是另一个条目的键:
use warnings;
use strict;
my $seq;
while(<>){
chomp;
my @line = split;
$seq->{"$line[2]" } = [@line];
}
foreach my $s (keys %{$seq} ) {
### @{ $seq->{$s}}[3] key for the second pair
print @{ $seq->{$s}}[0],"\t",@{ $seq->{$s}}[1],"\t",@{ $seq->{$s}}[2],"\t",@{ $seq->{$s}}[3],"\t",@{ $seq->{@{ $seq->{$s}}[3]}}[0],"\t",@{ $seq->{@{ $seq->{$s}}[3]}}[1],"\t",@{ $seq->{@{ $seq->{$s}}[3]}}[2],"\t",@{ $seq->{@{ $seq->{$s}}[3]}}[3],"\n";
delete ${$seq}{@{ $seq->{$s}}[3]};
}
它有效,但有一个小问题! 我不知道如何删除第二个键(在本例中为第二个条目中的 3009848)而不会出现以下错误:
NS501570 WWW 3009824 3009848 NS501572 WAD 3009848 3009898
Use of uninitialized value in hash element at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in hash element at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in hash element at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in hash element at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in print at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in print at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in print at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in print at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in print at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in print at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in print at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in print at find_mate2.pl line 22, <> line 2.
Use of uninitialized value in delete at find_mate2.pl line 23, <> line 2.
【问题讨论】:
-
delete ${$seq}{@{ $seq->{$s}}[3]};是一个非常奇怪的声明。你的意思是$key2 = $seq->{$s}[3]; delete $seq->{$key2};之类的吗? -
就此而言,
@{ $seq->{$s}}[n]最好写成$seq->{$s}[n]
标签: perl