我正在尝试使用perl读取FASTA文件,我想将每个标头作为键并将每个序列作为值放入哈希。我写了代码,但出现错误:没有这样的文件或目录 我的fasta文件和perl文件位于同一目录中。
这是我的代码
#!/usr/bin/perl
use strict;
my $file = "chicken.fa";
open (my $READ, "<$file") || die "Cannot open $file: $!.\n";
my %seqs = ();
my $header = '';
while (<$READ>){
my $line = $_;
chomp($line);
if ($line eq "") { next; }
if ($line =~ /^>.+/){
$line = $header;
} else {
$seqs{"$header"} .= $line;
}
}
close ($READ);
答案 0 :(得分:3)
如果确定确实存在名为chicken.fa
的文件,则有几种可能性。
错误的目录。按照编写的脚本,脚本将尝试在运行Perl脚本的目录中找到chicken.fa
文件。如果文件实际上位于其他目录中,则找不到该文件。
if (! -f 'chicken.fa') {
warn "'chicken.fa' doesn't exist in this directory!";
}
即使您的perl脚本和输入文件位于同一目录中,除非您也从该目录启动perl脚本,否则Perl不会找到您的文件。也就是说,这将起作用
cd /directory/where/the/stuff/is
perl the_script.pl
但这不会
cd /some/other/directory
perl /directory/where/the/stuff/is/the_script.pl
权限。您可能没有打开文件所需的权限,在这种情况下为读取权限。
if (! -r 'chicken.fa') {
warn "Don't have read permission on 'chicken.fa' file!";
}
错误的符号链接。也许chicken.fa
是到另一个位置的符号链接,而该位置不是有效文件。
if (-l 'chicken.fa' && ! -f readlink('chicken.fa')) {
warn "'chicken.fa' is an invalid symbolic link";
}