Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl readline中的文件结尾_Perl - Fatal编程技术网

Perl readline中的文件结尾

Perl readline中的文件结尾,perl,Perl,我正在尝试让Perl程序工作。我犯了一个错误 readline() on closed filehandle IN at Test.pl line 368, <IN> line 65. 因此,配置文件不正确,或者Perl无法识别这是文件的结尾 有办法解决这个问题吗 使现代化 根据这些评论,我添加了open或die命令,得到了以下结果: Test.pl第367行没有这样的文件或目录 open命令是子程序Primer3_运行的一部分 从你透露的情况来看,问题在于这个街区 if ( -e

我正在尝试让Perl程序工作。我犯了一个错误

readline() on closed filehandle IN at Test.pl line 368, <IN> line 65.
因此,配置文件不正确,或者Perl无法识别这是文件的结尾

有办法解决这个问题吗

使现代化 根据这些评论,我添加了open或die命令,得到了以下结果:

Test.pl第367行没有这样的文件或目录

open命令是子程序Primer3_运行的一部分


从你透露的情况来看,问题在于这个街区

if ( -e "$snpid.for" ) { system "del $snpid.for"; } 
紧接着就是这个

my $forward = "$snpid.for"; 

open(IN, $forward) or die $!;
新的或死的美元!可能是根据我的建议,所以之前您删除了$snpid.for,然后试图打开它进行输入。您看到的错误是意料之中的

Test.pl第367行没有这样的文件或目录

你刚刚删除了它

我所能想到的可能会有帮助的是,你的编码要更有条理。当你试图打开一个你刚刚确认不存在的文件时,你是什么意思


除此之外,您必须始终在编写的每个Perl程序的顶部添加use strict和use warnings“all”。将词汇文件句柄与open的三参数形式一起使用,并始终使用die检查每个open调用的状态,包括$的值!解释打开失败的原因。

正如错误消息明确指出的,文件内句柄上没有打开的文件。显示文件的内容以及您如何尝试读取它根本没有帮助。请帮助我们减少对代码的限制。您的代码中是否有要关闭的调用?特别是在while循环中。@Dave:文件句柄在某个点被正确打开,到达了第65行!请编辑您的问题以包含其他代码或数据。注释中的代码不可读。@TwanK:如果您希望人们阅读并理解您的代码,请花点时间将其正确格式化。每行开头的>符号是什么?您似乎只向我们展示了子程序的一半。谢谢大家的输入和建议。这是我第一次用perl做一些事情,并通过其他人获得脚本。我删除了包含system del命令的if命令,从而确保不会删除所有内容。但是,错误消息仍然存在。
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 $!;
if ( -e "$snpid.for" ) { system "del $snpid.for"; } 
my $forward = "$snpid.for"; 

open(IN, $forward) or die $!;