5

次のことはうまくいくとは思いませんが、うまくいきます。

$ perl -e '@a = qw/1222 2 3/; while (<@a>) { print $_ ."\n";}'
1222
2
3
$

私の知る限り、Perlの演算子は、魔法のようにを繰り返すリテラル(の代わりに)<>を除いて、ファイルハンドルやグロブなどを処理する必要があります。<><FILEHANDLE>@ARGV

私のテストと同じように機能するはずかどうか誰かが知っていますか?

4

3 に答える 3

11

魔法の仕事!

' perldoc perlop 'から:

山かっこ内にあるものがファイルハンドルでも、ファイルハンドル名、typeglob、またはtypeglob参照を含む単純なスカラー変数でもない場合、グロブされるファイル名パターン、およびファイル名のリストまたはリスト内の次のファイル名として解釈されます。コンテキストに応じて、が返されます。

これは、このコードでトリガーするルールです。何が起こっているのか:

  1. <@a>は(構文的にはコンパイル時に)glob拡張であると判断されます
  2. したがって、<>は@aを文字列 "1222 2 3"(配列の文字列補間)に変換します
  3. リストコンテキストのglob( "1222 2 3")は( '1222'、 '2'、 '3')を返します
于 2009-10-28T23:30:04.930 に答える
1

これはglobを呼び出しています。

于 2009-10-28T23:32:10.030 に答える
-1

<FH>はファイルハンドルの名前ではなく、ハンドルで行入力操作を行う角度演算子です。この混乱は通常、人々が角度演算子に印刷しようとすると現れます」 -Perlのプログラミング

したがって、あなたの場合、配列はハンドルであり、これは理にかなっているため、演算子はそれを繰り返し処理します。ですから、あなたの質問に答えて、はい、これは標準的な(しかしあいまいな)Perlだと思います。言語には配列を反復処理するためのより明白な方法があるため、あいまいです。

PSしかし、これのおかげで、これはコードゴルフ大会に最適です。

于 2009-10-28T23:20:45.410 に答える