で
while(<FH>){
$var1 = <FH>; $var2 = $_
}
内部のファイルハンドル名を持つダイヤモンドオペレータがreadline(FH)
と同じように動作しますので、私はこのような書面で特別な意味があるのは分かっていますか?
ありがとうございました
で
while(<FH>){
$var1 = <FH>; $var2 = $_
}
内部のファイルハンドル名を持つダイヤモンドオペレータがreadline(FH)
と同じように動作しますので、私はこのような書面で特別な意味があるのは分かっていますか?
ありがとうございました
直接の質問については、ドキュメントをご覧ください。
から、これは
<EXPR>
演算子を実装する内部関数ですが、あなたはそれを直接使用することができます。<EXPR>
オペレータはI/O Operators in perlop
で詳しく説明されており、I/O Operatorsに我々は
も
<FILEHANDLE>
readline(*FILEHANDLE)
を綴られる文を見つけます。 readlineを参照してください。
したがって<FH>
とreadline(FH)
は、(我々がreadline()
に*FH
又はFH
を渡すことができる)と等価です。
字句ファイルハンドルは、型グロブよりも優先されることに注意してください。たとえば、Typeglobs and Filehandles in perldataを参照してください。だから、
open my $fh, '<', $file or die "Can't open $file: $!";
のようなあなたのファイルを開くと、あなたは(それに関連付けられたファイルから)「ファイルハンドルから」読むために<$fh>
を行います。
オペレータ<>
には他にもいくつかのプロパティがあります。広範なperlop
の説明を参照してください。
質問の残りのコードスニペットは他の問題を引き起こします。
while
条件内の<FH>
は、スカラーコンテキスト内にあり、FH
に接続されたリソースから1行を読み込みます。ループ本体に入ると、<FH>
はになります。は次の行を読み込み、$var1
に割り当てられます。
<$FH>
がwhile
内の唯一のものである場合、その行はデフォルトのvariable $_
に割り当てられます。上記のI/O Operators
を参照してください。したがって$var2
がこの行に割り当てられます。
ループの本体が実行された後、最初の行は$var2
になり、次の行は$var1
になります。この奇妙なループは、各繰り返しで2行に渡ります。
ファイルからいくつかの複雑な**シーケンス**行を処理することが理にかなっているかもしれません。これは、より完全な例がなければ、まったくの推測です。 – AnFi