我有一个制表符分隔的文件:abc.txt。 ,其具有像数据:perl错误:'使用未初始化的值串联(。)或字符串'使用哈希
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
的关键值。
但是$递减的输出是空白,我得到错误:
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,第二列是描述。 – aki2all
您是否打印过'$ mRNA'的值?你在'%blast'中打印过键(和值)吗?这是第一步。从表面上看,这个消息意味着'$ mRNA'中的值不是'%blast'中的关键字。 –