perl - 如何解决错误:没有这样的文件或目录
问题描述
我正在尝试使用 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);
解决方案
如果您确定chicken.fa
确实存在名为的文件,则有多种可能性。
错误的目录。正如所写的那样,您的脚本将尝试
chicken.fa
在您运行 Perl 脚本的同一目录中查找文件。如果该文件实际上位于不同的目录中,则不会找到它。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!"; }
错误的符号链接。Maybe
chicken.fa
是指向另一个位置的符号链接,并且该位置不是有效文件。if (-l 'chicken.fa' && ! -f readlink('chicken.fa')) { warn "'chicken.fa' is an invalid symbolic link"; }
推荐阅读
- javascript - 如何从nodejs中的内部函数获取值
- android - 如何检测已编译应用程序中的错误?(Android Studio 3+)
- javascript - Redux 传奇路由器。如何在每场比赛中运行特定的路线传奇?
- c# - 如果方法抛出异常,则更改文本块的前景
- json - React js 不通过来自 rest api 的 JSON 渲染
- algorithm - 重叠次数最少的区间
- push-notification - Flutter:即使应用关闭也会推送通知
- node.js - node.js 中 res 的范围
- node.js - 通过 Steam 进行 OpenID 身份验证
- java - 供应商生成 IntStream 的 Lambda 表达式