ファイルグロブに関するPerlのドキュメントによると、<*>演算子またはglob()関数は、スカラーコンテキストで使用される場合、指定されたパターンに一致するファイルのリストを反復処理し、呼び出されるたびに次のファイル名を返す必要があります。これ以上ファイルがない場合はundef。
ただし、反復プロセスはループ内からのみ機能するようです。ループに入っていない場合は、すべての値が読み取られる直前に最初からやり直しているようです。
Perlドキュメントから:
スカラーコンテキストでは、globはそのようなファイル名展開を繰り返し、リストが使い果たされるとundefを返します。
http://perldoc.perl.org/functions/glob.html
ただし、スカラーコンテキストでは、演算子は呼び出されるたびに次の値を返すか、リストがなくなるとundefを返します。
http://perldoc.perl.org/perlop.html#I/O-Operators
コード例:
警告を使用します。 厳密に使用します。 私の$filename; #スカラーコンテキストでは、<*>は次のファイル名を返す必要があります #リストがなくなると呼び出されるかundefされるたび $ filename = <*>; 印刷"$filename \ n"; $ filename = <*>; #文書化されたとおりに機能せず、最初からやり直して 印刷"$filename \ n"; #常に同じファイル名を返します $ filename = <*>; 印刷"$filename \ n"; 印刷"\n"; $ filename=<*>の間に"$filename\n"を出力します。#ループで動作し、次のファイルを返します #呼び出されるたび
3つのファイル...file1.txt、file2.txt、およびfile3.txtがあるディレクトリでは、上記のコードは次のように出力されます。
file1.txt file1.txt file1.txt file1.txt file2.txt file3.txt
注:実際のperlスクリプトは、テストディレクトリの外にある必要があります。そうでない場合は、スクリプトのファイル名も出力に表示されます。
私はここで何か間違ったことをしていますか、それともこれがどのように機能するはずですか?