【发布时间】:2013-08-23 14:36:32
【问题描述】:
我有一个制表符分隔的文件:abc.txt。 其中有如下数据:
Pytul_T015270 Protein of unknown function
Pytul_T015269 Protein of unknown function
Pytul_T015255 Protein of unknown function
Pytul_T015297 Protein of unknown function
我正在创建一个解析器,它将这个 abc.txt 和其他 2 个文件作为输入,并通过调用包中的不同子例程来解析文件:utility.pm
解析abc.txt的子程序在我的包中定义,utility.pm如下:
use strict;
sub readblast{
my $fileName = shift;
my %hash;
my %geneNameHash;
open PRED, $fileName or die "Can't open file $!\n";
while (my $line=<PRED>) {
chomp $line;
#print $line,"\n";
(my $gene,my $desc) = split /\t/, $line;
$hash{$gene} = $desc;
}
close(PRED);
return %hash;
}
而我的使用哈希的parser.pl脚本如下:
my %blast=&utility::readblast($ARGV[2]);
for my $mRNA(keys %{ $featureHash{$scaffold}{$gene}}){
my $desc = $blast{$mRNA};
}
这里$featurehash 是我从另一个文件中生成的另一个哈希值。而$mRNA拥有文件abc.txt的键值。
但是 $desc 的输出是空白的,我得到了错误:
Use of uninitialized value $desc in concatenation (.) or string at parser.pl
my $desc = $blast{$mRNA}; 有什么问题,为什么不存储 abc.txt 的第 2 列?
【问题讨论】:
-
文件中有实际的标签吗?阅读时使用
Data::Dumper转储结构并发布输出。 -
@SinanÜnür 我检查了我的
abc.txt文件。那是一个制表符分隔的文件。第一列是 mRNA,第二列是描述。 -
你打印
$mRNA的值了吗?您是否在%blast中打印了键(和值)?这是第一步。从表面上看,该消息意味着$mRNA中的值不是%blast中的键。