Ошибка perl: 'использование неинициализированного значения в конкатенации (.) или строке' с использованием хэша
У меня есть файл с разделителями табуляции: 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};
И почему он не будет хранить 2-й столбец abc.txt?
1 ответ
Следующие меры предосторожности против конечных пустых строк и возможных разделителей без табуляции (с помощью split
с лимитом):
#!/usr/bin/env perl
package My::Utility;
use strict;
use warnings;
sub read_blast {
my $fh = shift;
my %hash;
while (my $line = <$fh>) {
chomp $line;
last unless $line =~ /\S/;
my ($key, $value) = split ' ', $line, 2;
$hash{ $key } = $value;
}
return \%hash;
}
package main;
my $blast = My::Utility::read_blast(\*DATA);
while (my ($k, $v) = each %$blast) {
print "'$k' => '$v'\n";
}
__DATA__
Pytul_T015270 Protein of unknown function
Pytul_T015269 Protein of unknown function
Pytul_T015255 Protein of unknown function
Pytul_T015297 Protein of unknown function