在Perl正则表达式编译中使用未初始化的值

时间:2011-09-12 16:07:42

标签: perl

我有以下代码:

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都被定义,因为我可以打印它们没问题。请帮忙。

2 个答案:

答案 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。