Perl中这个open()用法中dot的含义是什么?

Vic*_*cky 5 perl

如何理解open()Perl文件I/O 中该函数的以下用法?

open(FHANDLE, ">" . $file )
Run Code Online (Sandbox Code Playgroud)

我试图在文档中找到这种类型的语法,但没有找到; 请注意有一个.(点)在">"之后.

所有我无法理解的是使用dot,其余我知道.

Dav*_*man 12

这是一个旧的,两个参数形式的例子open(现在应该避免使用三个参数open).在Perl中,.是追加运算符.它将两个字符串组合成一个字符串.

你发布的代码行相当于open(FHANDLE, ">$file" ),它只是使用一种不同的方法来组合>$file.

如今open(my $fhandle, '>', $file),链接到的文档中显示了更好的方法.


sim*_*que 8

这是两个论点open.点.是Perl中的字符串连接运算符.如果open使用两个参数调用,则第二个参数包含模式和路径.

在您的情况下,它将打开名为in的文件$file进行写入.

但是,由于几个原因,你不应该这样做.使用三参数open和词法文件句柄而不是全局GLOB文件句柄更常见.

词法文件句柄确保Perl在超出范围时立即隐式关闭handel.对模式和文件名使用不同的args是一个安全问题,因为否则恶意用户可能会将模式更改走私到文件名中.

open my $fh, '>', $file or die $!;
Run Code Online (Sandbox Code Playgroud)

除了现在的词法文件句柄以及模式和文件名的分离之外,我们还检查此代码中的错误,这总是一个好主意.