这是一种标准的Perl语言构造还是一种定制:openhandle&燃气轮机$fname“;
不是一个Perl大师,在使用一个古老的脚本时,遇到了一个我不认识的构造,它产生了我不期望的结果。好奇这是标准语言还是PM定制:这是一种标准的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个。日志没有骰子输出,而是说:“找不到文件” 我有点困惑 编辑:使用下面的答案使
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:$?”代码>。
- 现在我们更喜欢使用词法变量作为文件句柄(因此,