2017-09-26 150 views
5

如何理解Perl File I/O中open()函數的以下用法?這個open()在Perl中的用法是什麼意思?

open(FHANDLE, ">" . $file) 

我試圖找到這種類型的語法in the docs但沒有找到;請注意有一個。 (點)「>」後。

我所不能理解的是使用點,我知道的其餘部分。

+0

https://perldoc.perl.org/perlop.html#Additive-Operators –

回答

12

這是open舊的雙參數形式的示例(現在應該避免使用三參數open)。在Perl中,.是附加運算符。它將兩個字符串合併爲一個字符串。

您發佈的代碼行相當於open(FHANDLE, ">$file"),它只是使用了一種結合>$file的不同方法。

這些日子最好的方法是open(my $fhandle, '>', $file),如鏈接到的文檔中所示。

8

這是雙參數open。點號.是Perl中的字符串連接運算符。如果使用兩個參數調用open,則第二個參數將同時包含模式和路徑。

就你的情況而言,它將打開$file中用於書寫的文件。

但是,有幾個原因你不應該這樣做。使用三參數打開和詞法文件句柄代替全局GLOB文件句柄更爲常見。

詞法文件句柄確保Perl一旦超出範圍就隱式關閉漢德爾。對模式和文件名使用不同的參數是一個安全問題,因爲否則惡意用戶可能會將模式更改走私到文件名中。

open my $fh, '>', $file or die $!; 

除了現在詞法文件句柄和模式的分離和文件名,我們也爲您在這個代碼,這始終是一個好主意的錯誤。