最近我碰到這樣的事情在一定的perl腳本來了:區別_在Perl
while(<FH>){
$var1 = <FH>; $var2 = $_
}
由於與文件句柄名的鑽石運營商內部的工作方式爲readline(FH)
相同;我可否知道這樣的書寫有什麼特別的含義?
非常感謝
最近我碰到這樣的事情在一定的perl腳本來了:區別_在Perl
while(<FH>){
$var1 = <FH>; $var2 = $_
}
由於與文件句柄名的鑽石運營商內部的工作方式爲readline(FH)
相同;我可否知道這樣的書寫有什麼特別的含義?
非常感謝
讓我們聯繫直接問題的文檔。
這是實現
<EXPR>
運營商內部的功能,但你可以直接使用它。該<EXPR>
運營商進行了更詳細的I/O Operators in perlop
討論並在I/O Operators我們發現聲明
<FILEHANDLE>
也可以拼寫readline(*FILEHANDLE)
。請參閱readline。
因此<FH>
和readline(FH)
是等價的(我們可以通過*FH
或FH
到readline()
)。
請注意,詞法文件句柄比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
的下一行。這個奇怪的循環在每次迭代中都會遍歷兩行。
處理來自文件的一些更復雜的**序列**行可能是有意義的。沒有更完整的例子,這是一個猜測。 – AnFi