ste*_*ema 6 syntax perl file-io
我使用这种语法来打开我的文件,因为几年前我在训练中学到了这些,而且我也用同样的方式做了书.
open( INPUTFILE, "< $input_file" ) || die "Can't open $input_file: $!";
Run Code Online (Sandbox Code Playgroud)
前几天我在SO中回答了这个表格:
open( $input_file, "<", $input_file ) || die "Can't open $input_file: $!";
Run Code Online (Sandbox Code Playgroud)
这种格式是新的还是只是以不同的方式,使用普通变量作为文件句柄?
我应该改为"新"格式吗?它有一些优点,还是"旧"格式有一些缺点?
Can*_*ice 11
您应该使用三参数版本,因为它可以防止具有疯狂名称的文件.考虑以下:
my $file = "<file.txt";
open( INPUTFILE, "< $file" ) or die "$!";
Run Code Online (Sandbox Code Playgroud)
这将插入为:
open( INPUTFILE, "< <file.txt" ) or die "$!";
Run Code Online (Sandbox Code Playgroud)
...意味着你实际上会打开一个名为file.txt而不是命名的文件<file.txt.
现在,对于文件句柄,您想要使用词法文件句柄:
open( my $fh, "<", $file.txt ) or die "$!";
Run Code Online (Sandbox Code Playgroud)
原因是当$fh超出范围时,文件关闭.此外,另一种类型的文件句柄(我不记得它的名称)具有全局范围.程序员是不是所有的想象力,所以很可能,你会命名文件句柄INPUTFILE或FH或FILEHANDLE.如果其他人INPUTFILE在您使用的模块中做了同样的命名,他们的文件句柄会发生什么?好吧,它们都是有效的,而另一个则是有效的.哪一个clobbers?谁知道.这取决于它们何时打开.结束?如果其他程序员已经打开INPUTFILE但实际打开它进行写入会发生什么?世界末日,我的朋友,世界末日.
如果你使用词法文件句柄($fh你),你不必担心世界的结束,因为即使其他程序员确实调用它$fh,变量范围也可以保护你免受攻击.
所以是的,总是使用open()lexical文件句柄的三参数形式.拯救世界.
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |