gpt4 book ai didi

perl - 为什么使用自动激活文件句柄的三参数开放调用是 Perl 最佳实践?

转载 作者:行者123 更新时间:2023-12-02 01:33:03 24 4
gpt4 key购买 nike

我有两个关于 Perl open 函数的问题:

1)我似乎记得Perl最佳实践open的3参数版本比两个参数版本更好,例如

open(OUT, '>>', $file);

对比

open(OUT, ">>$file");

这是为什么呢?前几天我试图告诉某人使用 3 参数版本,但似乎无法用任何东西来支持它。

2)我似乎还记得自动激活的文件句柄比裸字文件句柄更受青睐(他们称之为不同的东西)?并且也不记得为什么,例如

open(my $out, '>>', $file);

对比

open(OUT, '>>', $file);

这是一个严格的事情吗?我似乎记得能够将 OUTstrict 一起使用,但我不记得了。

最佳答案

  • 对文件句柄使用 typeglob(如 OUT)并不是一个好主意,因为它们在整个程序中是全局的 - 您需要确保没有其他例程(包括模块中的例程)使用相同的例程姓名(包括将来的姓名)。
  • 使用 open 的双参数形式会使您的应用程序遭受由包含特殊字符的变量引起的错误行为,例如 my $f; open $f, ">$some_filename"; 会遇到以下错误:$some_filename 包含前导 > 将改变程序的行为。

使用三参数形式可以通过将模式和文件名分隔成单独的参数来避免这种情况,这样它们就不会相互干扰。

此外,使用带有管道的大量参数形式是一个非常好的主意:

open $pipe, '|-', 'sendmail', 'fred@somewhere.fake';

比将所有操作作为单个字符串更好 - 它避免了可能的 shell 注入(inject)等。

关于perl - 为什么使用自动激活文件句柄的三参数开放调用是 Perl 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479741/

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