我试图让Perl程序正常运行。我收到错误
readline() on closed filehandle IN at Test.pl line 368, <IN> line 65.
该计划的第363-369行看起来像这样
print "Primer3 is done! \n";
my $forward = "$snpid.for";
my @forward_out;
my $i=0;
open(IN,$forward);
while(<IN>){
chomp;s/\r//;
并指配置文件。最后一行(第65行)看起来像这样
num_cpus = 40
因此配置文件不正确,或者Perl无法识别这是文件的末尾。
有没有办法解决这个问题?
根据评论我添加了open() or die
命令,并得到了这个:
在Test.pl第367行没有这样的文件或目录。
open
命令是子例程Primer3_Run
sub Primer3_Run {
my $snpid = shift;
my $seq = shift;
my $tmp_input = "Primer3.tmp.input";
my $len = length($seq);
open(OUT, ">$tmp_input");
close OUT;
if ( -e "$snpid.for" ) {
system "del
$snpid.for";
}
if ( -e "$snpid.rev" ) {
system "del $snpid.rev";
}
system
"$params{'primer3'}
Primer3.tmp.input
Primer3.Log.txt 2>&1 ";
my $forward = "$snpid.for";
my @forward_out;
my $i = 0;
open(IN, $forward) or die $!;
答案 0 :(得分:0)
从您所揭示的内容来看,问题将是这个障碍
if ( -e "$snpid.for" ) { system "del $snpid.for"; }
之后很快就会出现
my $forward = "$snpid.for";
open(IN, $forward) or die $!;
新or die $!
可能来自我的建议,所以之前您正在删除"$snpid.for"
,然后尝试打开它进行输入。您应该看到错误
在Test.pl第367行没有这样的文件或目录。
你刚刚删除了它!
我能想到的一切可能对您的编码更有条理。当你试图打开一个刚刚确定不存在的文件时,你的意思是什么?
除此之外,必须始终在您编写的每个 Perl程序的顶部添加use strict
和use warnings 'all'
。使用词汇文件句柄和三参数形式的open
和始终检查 每个>的状态em> open
调用,使用die
包含die字符串中$!
的值来解释open
失败的原因。