gpt4 book ai didi

perl - 这些 "open"格式有什么区别

转载 作者:行者123 更新时间:2023-12-04 13:24:42 27 4
gpt4 key购买 nike

我使用这种语法来打开我的文件,因为几年前我在一次培训中了解到这一点,而我所拥有的书籍也是这样做的。

open( INPUTFILE, "< $input_file" ) || die "Can't open $input_file: $!";

几天前,我在一个 SO 回答中看到了这种形式:
open( $input_file, "<", $input_file ) || die "Can't open $input_file: $!";

这种格式是新的还是只是做同样的,不同的方式,使用普通变量作为文件句柄?

我应该更改为"new"格式吗?它有一些优点,还是“旧”格式有一些缺点?

最佳答案

您应该使用三参数版本,因为它可以防止具有疯狂名称的文件。考虑以下:

my $file = "<file.txt";
open( INPUTFILE, "< $file" ) or die "$!";

这将插入为:
open( INPUTFILE, "< <file.txt" ) or die "$!";

...意味着您实际上将打开一个名为 file.txt 的文件而不是一个名为 <file.txt .

现在,对于文件句柄,您要使用词法文件句柄:
open( my $fh, "<", $file.txt ) or die "$!";

原因是当 $fh超出范围,文件关闭。此外,另一种类型的文件句柄(我不记得它叫什么了)有 全局 范围。程序员并没有那么有想象力,所以您可能会将您的文件句柄命名为 INPUTFILEFHFILEHANDLE .如果其他人做了同样的事情,将他们的文件句柄命名为 INPUTFILE,会发生什么? ,在您使用的模块中?好吧,它们都是有效的,并且一个破坏另一个。哪一个破坏?谁知道。这取决于它们何时打开的顺序。并关闭?如果其他程序员打开了 INPUTFILE 会发生什么?但实际上打开它写?世界末日,我的 friend ,世界末日。

如果您使用词法文件句柄( $fh),您不必担心世界末日,因为即使其他程序员确实调用它 $fh , 变量作用域保护你免受破坏。

所以是的,总是使用 open() 的三参数形式带有词法文件句柄。拯救世界。

关于perl - 这些 "open"格式有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5479071/

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