【发布时间】:2017-06-20 05:36:26
【问题描述】:
我正在尝试从这个 FASTA 文件中提取一个 DNA 序列到每行指定长度的碱基,比如 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.
谁能告诉我我做错了什么?
【问题讨论】:
-
您需要在对 fasta.pm 中的函数的调用前加上“fasta::” - 即写入 fasta::read_fasta($filename) 等 - 或者您需要将 fasta.pm 更改为导出您希望不带前缀可用的功能。
-
通常只有 Perls 自己的包以小写字符开头,因此您可能需要重命名您的 .pm。
-
最后,看看 BioPerl 解析/生成生物信息学相关格式可能值得您花时间:bioperl.org
-
最后一部分应该可以工作。使用 Fasta:: 显式调用有效并且一直对我有用。请为此发布特定的错误消息。
-
Fasta:: 部分的错误信息已在帖子中更新
标签: perl bioinformatics subroutine fasta