我有以下代码:
use strict;
use warnings;
use IO::File;
use Bio::SeqIO;
my ($file1) = $ARGV[0];
my ($file2) = $ARGV[1];
my $fh1 = IO::File->new("$file1")|| die "Can not create filehandle";
my $fh2 = IO::File->new("$file2")|| die "Can not create filehandle";
my @aligned_array = ();
while(my $line1 = $fh1->getline){
chomp($line1);
if (($line1 =~ /^match/)||($line1 =~ /^-/)) {
next;
}
else {
my @line_array = split(/\s+/, $line1);
push(@aligned_array, $line_array[9]);
}
}
my $fio1 = IO::File->new("> chimeric_contigs.txt")|| die "Can not create filehandle";
while(my $line2 = $fh2->getline) {
my $count = 0;
chomp($line2);
for my $aligned (@aligned_array) {
# print $line2.$aligned."\n";
if ($line2 =~ m/$aligned/) {
$count++;
}
}
if ($count >= 2) {
print $fio1 $line2."\n";
}
}
$fio1->close;
我一直得到同样的错误
在/gscuser/rfujiwar/bin/find_chimeric_contigs_blat.pl第41行的正则表达式编译中使用未初始化的值
这是第41行:if($ line2 = ~m / $ aligned /){
$ line2和$ align都被定义,因为我可以打印它们没问题。请帮忙。
答案 0 :(得分:4)
(转自评论,因此最终解决了问题)是否定义了@aligned_array
的所有元素?第41行放入next unless defined $aligned;
之前。
答案 1 :(得分:2)
如果$ line_array [9]在将其推送到@aligned_array时未初始化,您会看到此错误:
my @line_array = split(/\s+/, $line1); push(@aligned_array, $line_array[9]);
换句话说,split在$ line1中找不到十个以空格分隔的元素($#line_array小于9)。所以不要将这一行添加到数组中,或者将输入修复为$ file1。