2017-07-20 35 views
1

最近我碰到這樣的事情在一定的perl腳本來了:區別_在Perl

while(<FH>){ 
    $var1 = <FH>; $var2 = $_ 
} 

由於與文件句柄名的鑽石運營商內部的工作方式爲readline(FH)相同;我可否知道這樣的書寫有什麼特別的含義?

非常感謝

+0

處理來自文件的一些更復雜的**序列**行可能是有意義的。沒有更完整的例子,這是一個猜測。 – AnFi

回答

4

讓我們聯繫直接問題的文檔。

readline

這是實現<EXPR>運營商內部的功能,但你可以直接使用它。該<EXPR>運營商進行了更詳細的I/O Operators in perlop

討論並在I/O Operators我們發現聲明

<FILEHANDLE>也可以拼寫readline(*FILEHANDLE)。請參閱readline

因此<FH>readline(FH)是等價的(我們可以通過*FHFHreadline())。

請注意,詞法文件句柄比typeglobs更受歡迎。例如參見Typeglobs and Filehandles in perldata。所以,打開你的文件,如

open my $fh, '<', $file or die "Can't open $file: $!"; 

,然後你做<$fh>「從文件句柄」(從與它相關的文件)讀取。

雖然,運營商<>本身還有其他一些屬性。請參閱廣泛的perlop討論。


該問題的其餘代碼段引發了其他問題。

while條件中的<FH>條件處於標量上下文中,因此它從連接到FH的資源中讀取一行。隨着我們進入循環體,<FH>再次讀出一行,因此下一個,它被分配到$var1

<$FH>while條件內的唯一內容時,該行被賦予默認的variable $_。請參閱上面鏈接的I/O Operators。因此$var2被分配了這一行。

因此,在執行循環體之後,我們在$var2的第一行和$var1的下一行。這個奇怪的循環在每次迭代中都會遍歷兩行。

相關問題