Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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语言构造还是一种定制:openhandle&燃气轮机$fname“;_Perl_Error Handling_File Io - Fatal编程技术网

这是一种标准的Perl语言构造还是一种定制:openhandle&燃气轮机$fname“;

这是一种标准的Perl语言构造还是一种定制:openhandle&燃气轮机$fname“;,perl,error-handling,file-io,Perl,Error Handling,File Io,不是一个Perl大师,在使用一个古老的脚本时,遇到了一个我不认识的构造,它产生了我不期望的结果。好奇这是标准语言还是PM定制: open FILE1, ">./$disk_file" or die "Can't open file: $disk_file: $?"; 从外观上看,文件将被打开进行写入,但日志错误显示未找到该文件。Perl的文件i/o需要3个参数,而不是2个。日志没有骰子输出,而是说:“找不到文件” 我有点困惑 编辑:使用下面的答案使

不是一个Perl大师,在使用一个古老的脚本时,遇到了一个我不认识的构造,它产生了我不期望的结果。好奇这是标准语言还是PM定制:

open FILE1, ">./$disk_file" or die "Can't open file: $disk_file: $?";
从外观上看,文件将被打开进行写入,但日志错误显示未找到该文件。Perl的文件i/o需要3个参数,而不是2个。日志没有骰子输出,而是说:“找不到文件”

我有点困惑


编辑:使用下面的答案使其工作。似乎我运行了一段时间的.pl的现金版本,而不是新编辑的。最后它赶上了一个2参数的开放,谢谢你们的帮助

这是open的旧的2参数形式。第二个论点有点神奇:

  • 如果以
    '>'
    开头,则字符串的其余部分将用作要打开以进行写入的文件的名称
  • 如果它以
    ”开头,请参阅以了解详细信息,但简而言之

    Perl的
    open()
    将接受两个或三个参数(甚至还有一个单参数版本,从来没有人使用过)。双参数版本是一种稍旧的样式,其中打开模式和文件名在第二个参数中连接在一起

    因此,您所拥有的相当于:

    open FILE1, '>', "./$disk_file" or die "Can't open file: $disk_file: $?";
    
    还有几点

  • 现在我们更喜欢使用词法变量作为文件句柄(因此,
    打开我的$file1,
    而不是
    打开file1,
  • 我想你会发现
    $在错误消息中比
    $?
    更有用<代码>$?
    包含子进程的错误,但此处没有子进程

  • 更新:所有这些似乎都不会导致您看到的问题。这似乎是由于文件实际不在预期位置造成的。请编辑您的问题,添加您看到的确切错误信息。

    此处的其他答案正确,这是双参数语法。他们做得很好,涵盖了为什么以及如何理想地改变它,所以我不会在这里重复

    但是他们没有试着帮你修好,所以让我试试

    这是一个猜测,但我怀疑
    $disk\u file
    包含一个带有路径的文件名(例如
    my\u logs/somelog.log
    ),并且目录部分(
    my\u logs
    在我完全猜测的示例中)不存在,因此引发了一个错误。您可以创建该目录,或者更改设置该变量的任何内容,使其写入确实存在的位置

    请记住,这些路径将与运行脚本的位置相关,而不是与脚本本身相关,因此,如果在与脚本相同的目录中有日志目录(或任何目录),则您可能希望先将
    cd
    发送到脚本的目录。

    您需要查看此结构的描述位置。如今,类似的结构以现代风格编写,如
    打开我的$fh,'>,$disk\u file或die“无法打开文件:$disk\u file:$?”