Я пытаюсь извлечь последовательность ДНК из этого файла FASTA до указанной длины оснований в строке, скажем, 40.
> sample dna (This is a typical fasta header.)
agatggcggcgctgaggggtcttgggggctctaggccggccacctactgg
tttgcagcggagacgacgcatggggcctgcgcaataggagtacgctgcct
gggaggcgtgactagaagcggaagtagttgtgggcgcctttgcaaccgcc
tgggacgccgccgagtggtctgtgcaggttcgcgggtcgctggcgggggt
Используя этот модуль Perl (fasta.pm):
package fasta;
use strict;
sub read_fasta ($filename) {
my $filename = @_;
open (my $FH_IN, "<", $filename) or die "Can't open file: $filename $!";
my @lines = <$FH_IN>;
chomp @lines;
return @lines;
}
sub read_seq (\@lines) {
my $linesRef = @_;
my @lines = @{$linesRef};
my @seq;
foreach my $line (@lines) {
if ($line!~ /^>/) {
print "$line\n";
push (@seq, $line);
}
}
return @seq;
}
sub print_seq_40 (\@seq) {
my $linesRef = @_;
my @lines = @{$linesRef};
my $seq;
foreach my $line (@lines) {
$seq = $seq.$line;
}
my $i= 0;
my $seq_line;
while (($i+1)*40 < length ($seq)) {
my $seq_line = substr ($seq, $i*40, 40);
print "$seq_line\n";
$i++;
}
$seq_line = substr ($seq, $i*40);
print "$seq_line\n";
}
1;
И основной сценарий
use strict;
use warnings;
use fasta;
print "What is your filename: ";
my $filename = <STDIN>;
chomp $filename;
my @lines = read_fasta ($filename);
my @seq = read_seq (\@lines);
print_seq_40 (\@seq);
exit;
Это ошибка, которую я получаю
Undefined subroutine &main::read_fasta called at q2.pl line 13, <STDIN> line 1.
Может ли кто-нибудь просветить меня, в какой части я сделал неправильно?
sub method ( $arg ){
) - person bytepusher   schedule 15.11.2014Fasta.pm
? Есть серьезные проблемы с ним, которые должны быть исправлены. - person Borodin   schedule 15.11.2014sub read_fasta { my $filename = @_;
не работает. Я сказал вам просто следовать моему примеру в ответе, который я редактировал. Это не так в вашем посте. - person bytepusher   schedule 15.11.2014our @ISA = qw( Exporter );
, который необходим. Прости. Я также отредактировал объяснение, почему $scalar =@_ — это не то, что вам нужно. - person bytepusher   schedule 15.11.2014