$fname"-6ren"> $fname"-不是 Perl 大师,使用古老的脚本,遇到了一个我不认识的结构,它产生了我意想不到的结果。想知道这是标准语言还是某种 PM 定制: open FILE1, ">./$disk_file" or die-6ren">
gpt4 book ai didi

perl - 这是标准的 Perl 语言构造还是自定义 : open HANDLE, ">$fname"

转载 作者:行者123 更新时间:2023-12-03 07:39:48 25 4
gpt4 key购买 nike

不是 Perl 大师,使用古老的脚本,遇到了一个我不认识的结构,它产生了我意想不到的结果。想知道这是标准语言还是某种 PM 定制:

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

从这里看起来,文件将被打开写入,但日志错误说找不到文件。 Perl 的文件 i/o 需要 3 个参数,而不是 2 个。日志没有 die 输出,而是说:“找不到文件”

这里有点迷糊。

编辑:使用以下答案使其工作。好像我运行了一段时间的 .pl 的兑现版本,而不是新编辑的。终于 catch 了 2-param open,感谢大家的帮助!

最佳答案

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

  • 如果以'>'开头字符串的其余部分用作要打开以进行写入的文件的名称
  • 如果以'<'开头字符串的其余部分用作要打开以供阅读的文件的名称(如果省略“<”,则这是默认设置)
  • 如果以'|'结尾到那时为止的字符串被解释为一个命令,该命令通过其 STDOUT 连接到您的脚本将打开以供阅读的管道执行
  • 如果以'|'开头该点之后的字符串被解释为一个命令,该命令通过其 STDIN 连接到您的脚本将打开以进行写入的管道来执行这是一个潜在的安全漏洞,因为如果您的脚本接受文件名作为用户输入,则用户可以添加 '|'在开始或结束时欺骗您的脚本运行命令。

open 的三参数形式是在(我认为)5.8 版中添加的,因此很长一段时间以来它一直是 Perl 的标准部分。

FILE1部分被称为裸字文件句柄 - 这是一个全局的。现代风格是使用像 my $file1 这样的词法标量。相反。

关于perl - 这是标准的 Perl 语言构造还是自定义 : open HANDLE, ">$fname",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63501231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com