readline中的文件结尾

时间:2018-03-22 14:01:14

标签: perl

我试图让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 $!;

1 个答案:

答案 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 strictuse warnings 'all'。使用词汇文件句柄三参数形式的open始终检查 每个的状态em> open调用,使用die包含die字符串中$!的值来解释open失败的原因。