2011-09-12 52 views
2

我有以下代碼:在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 /箱/find_chimeric_contigs_blat.pl線41

這是線41:如果($ LINE2 =〜米/ $對齊/){

兩個$ LINE2及$對齊的定義,因爲我可以p他們沒有問題。請幫忙。

+0

你打印它們時會得到什麼? –

+0

,我期待 – Ryan

+0

Contig0.3Contig872.1 Contig0.3Contig872.1 Contig0.3Contig872.1 Contig0.3Contig872.1 Contig0.3Contig873.1等正確的琴絃......這就是取消註釋#打印的結果$ LINE2 $對齊 「\ n」。 – Ryan

回答

4

(從評論轉載,因爲這最終解決了問題)是否定義了所有@aligned_array的元素?在41行之前放入next unless defined $aligned;

2

你會看到這個錯誤,如果$ line_array [9]未初始化的時候,你把它壓@aligned_array:

my @line_array = split(/\s+/, $line1); 
    push(@aligned_array, $line_array[9]); 

換句話說,分裂沒有發現10個空間分隔$ line1(和$#line_array小於9)中的元素。因此,不要將此行添加到數組中,或修復$ file1中的輸入。