Использование неинициализированного значения в компиляции Perl Regular Expression - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть следующий код:

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 / $ align /) {

и $ line2, и $ align определены, потому что я могу напечатать их без проблем.Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

(Перепроверено из комментариев, так как это привело к решению проблемы) Определены ли все элементы @aligned_array?Перед строкой 41 введите next unless defined $aligned;.

2 голосов
/ 12 сентября 2011

Вы увидите эту ошибку, если $ line_array [9] не инициализирован, когда вы вставите его в @aligned_array:

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

Другими словами, split не находит десять разделенных пробелами элементов в $ line1 (а $ # line_array меньше девяти). Поэтому не добавляйте эту строку в массив и не исправляйте ввод в $ file1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...