Скачивание файла последовательности с помощью perl

Я пытаюсь загрузить файл последовательности из базы данных банка генов с помощью Perl, но он показывает ошибку. У меня нет руководства по исправлению моей программы.

Кто-нибудь может мне с этим помочь? Ошибка в строке 6 (use Bio::DB::GenBank;)

Файл accnumber.txt находится на моем рабочем столе, и я запускаю программу с самого рабочего стола. Я использую CentOS.

#!usr/bin/perl -w

use strict;
use warnings;

use Bio::DB::GenBank;

open (INPUT_FILE, 'accnumber.txt');
open (OUTPUT_FILE, 'sequence_dwnl.fa');

while()
{
    chomp;
    my $line = $_;
    my @acc_no = split(",", $line);
    my $counter = 0;

    while ($acc_no[$counter])
    {
        $acc_no[$counter] =~ s/\s//g;

        if ($acc_no[$counter] =~ /^$/)
        {
            exit;
        }

        my $db_obj = Bio::DB::GenBank->new;
        my $seq_obj = $db_obj->get_Seq_by_acc($acc_no[$counter]);
        my $sequence1 = $seq_obj->seq;

        print OUTPUT_FILE ">"."$acc_no[$counter]","\n";
        print OUTPUT_FILE $sequence1,"\n";
        print "Sequence Downloaded:", "\t", $acc_no[$counter], "\n";

        $counter++;
    }
}

close OUTPUT_FILE;
close INPUT_FILE;

Я получаю следующие ошибки:

Bareword "Bio::DB::GenBank" not allowed while "strict subs" in use at db.pl line 6.
Bareword "new" not allowed while "strict subs" in use at db.pl line 27.
Bareword "seq" not allowed while "strict subs" in use at db.pl line 29.
Execution of db.pl aborted due to compilation errors.

person Manoj kumar K    schedule 27.03.2013    source источник
comment
open (OUTPUT_FILE, 'sequence_dwnl.fa'); должно быть open (OUTPUT_FILE, '>', 'sequence_dwnl.fa');, но это не похоже на проблему, которую вы определяете.   -  person kjprice    schedule 27.03.2013
comment
Кроме того, в чем заключается ошибка?   -  person kjprice    schedule 27.03.2013
comment
Ваша первая строка должна быть: #!/usr/bin/perl -w   -  person imran    schedule 27.03.2013
comment
Ваша первая строка должна быть #!/usr/bin/perl -w Также у вас есть > по всему сценарию. Замените это на «› ». Сообщите нам, какие еще ошибки вы видите при запуске скрипта.   -  person imran    schedule 27.03.2013
comment
use warnings; в наши дни обычно поощряется более -w. stackoverflow.com/questions/221919/   -  person Jim Davis    schedule 28.03.2013
comment
На самом деле я пытался установить модуль Bio::Perl и отладить сценарий для вас, но даже после исправления вещей, упомянутых здесь, сценарий все еще имеет серьезные проблемы. Например, он будет работать в бесконечном цикле без какого-либо значимого вывода. Тем не менее, поскольку вы все еще получаете ошибки с голым словом, я подозреваю, что вы не исправили > проблемы. И тот факт, что вы получаете их в строке 6, заставляет меня подозревать, что вы на самом деле используете тот же код, что и выше.   -  person Alois Mahdal    schedule 30.03.2013
comment
Подводя итоги, пожалуйста, сотрудничайте с нами и примените исправления, упомянутые здесь. И , если проблема исходной не устранена, обновите вопрос, добавив новую версию кода. Также ответьте на предложения, чтобы мы знали, что вы пробовали и помогло это или нет. В противном случае мы не сможем вам помочь, поскольку у большинства из нас нет хрустальных шаров. Таким образом, вы только расстраиваете тех, кто хочет вам помочь, зарабатывая отрицательные голоса и рискуя, что вопрос будет закрыт.   -  person Alois Mahdal    schedule 30.03.2013


Ответы (2)


Поскольку упомянутая вами строка загружает внешний модуль Perl Bio::DB::GenBank из CPAN, первым делом пришло в голову: модуль установлен в вашей системе?

Попробуйте запустить команду cpan Bio::DB::GenBank от имени пользователя root (например, добавив к ней sudo). Это не должно повредить, даже если модуль установлен, в этом случае он будет проверять CPAN на наличие обновлений.

person Alois Mahdal    schedule 27.03.2013
comment
Я получаю эту ошибку, когда изменяю свой скрипт. Bareword Bio :: DB :: GenBank не разрешен, пока строгие подпрограммы используются в строке 6 db.pl. Bareword new не разрешено, пока строгие подпрограммы используются в строке 27 db.pl. Bareword seq не допускается, пока в строке 29 db.pl используются строгие подпрограммы. Выполнение db.pl прервано из-за ошибок компиляции. - person Manoj kumar K; 28.03.2013
comment
@ManojkumarK Алоис исправил ваш код в исходном посте. Используйте это и попробуйте еще раз. Кстати, я не думаю, что правильно исправлять код в исходном сообщении, это то, что должны делать ответы. - person imran; 28.03.2013
comment
@imran Я думал об этом, но пока вы исправляете только код, который, очевидно, не является частью вопроса, я думаю, все должно быть в порядке. OTOH Мне не очень помогает, если все начинают отвечать на проблемы, вызванные только плохой разметкой ... - person Alois Mahdal; 29.03.2013
comment
@ManojkumarK пока что звучит странно. Убедитесь, что вы используете последнюю версию кода, в строке 27 нет ключевого слова new. Также убедитесь, что вы исправили #! строка, как было предложено (я не могу сделать это в OP из-за ограничения в 6 символов) - person Alois Mahdal; 29.03.2013
comment
@AloisMahdal Ошибки, которые он получает по поводу bareword new и bareword seq, напрямую связаны с проблемой >. - person imran; 29.03.2013
comment
@imran Похоже, вы правы, возвращая часть кода. Я думал, что это результат перевода на MD и обратно, но надо было подумать дважды ... :) Но все же сбивает с толку то, что первая ошибка сообщается в строке 6. - person Alois Mahdal; 29.03.2013
comment
@AloisMahdal да, ошибка в строке 6 нечетная. Я хотел бы посмотреть, какую ошибку он получает с обновленным кодом. - person imran; 29.03.2013
comment
Bareword Bio :: DB :: GenBank не допускается, пока строгие подпрограммы используются в строке 6 db.pl. Голые слова new не разрешены, пока строгие подпрограммы используются в строке 27 db.pl. Bareword seq не допускается, пока строгие подпрограммы используются в db. pl строка 29. Выполнение db.pl прервано из-за ошибок компиляции. это моя ошибка - person Manoj kumar K; 30.03.2013
comment
@ManojkumarK, вы заменили > на >? какой редактор вы используете для редактирования скрипта? Если вы все же внесли это изменение, я чувствую, что ваш редактор неявно преобразует скрипт в HTML. - person imran; 01.04.2013

В дополнение к приведенному выше ответу,

Пожалуйста, используйте функцию die, чтобы проверить, открыты ли файлы.

open (INPUT_FILE, 'accnumber.txt');
open (OUTPUT_FILE, 'sequence_dwnl.fa');

Нравится:

open (my $input_file, '<', 'accnumber.txt') or die "Could not open because $!\n";
open (my $output_file, '<', 'sequence_dwnl.fa') or die "Could not open because $!\n";

Также укажите цель открытия каждого файла с помощью следующих операторов:

  1. <, чтобы открыть файл в режиме только для чтения.
  2. >, чтобы перезаписать содержимое файла.
  3. >>, чтобы добавить содержимое файла.

Также проверьте, установлен ли у вас модуль Bio::DB::GenBank.

Вы можете сделать это, запустив это в командной строке:

perldoc -l Bio::DB::GenBank or perl -MBio::DB::GenBank -e 1

person Krishnachandra Sharma    schedule 27.03.2013
comment
Кришначандра, ты пробыл здесь достаточно долго, и я голосовал за тебя достаточно раз. Пожалуйста, начните использовать современный стиль Perl. Мы привязываем, чтобы удалить примеры обработчиков bareword и двух аргументов, а не добавлять их! open (my $input_handle, '<', 'accnumber.txt') or die "Could not open because $!\n"; - person Joel Berger; 28.03.2013