参照:Where in the documentation does it say that while tests readdir for definedness?。 (ない重複;ちょうど密接に関連し。)whiled条件でreaddir()の "0"の結果がfalseにならないのはどうですか?
多くの人々がとして慣用以下のループ処理:おそらく後者であるため
while (my $file = readdir($dir)) {
...
}
:
while (defined(my $file = readdir($dir)) {
...
}
の代わりにバージョンがファイル名が "0"(ゼロ)の場合、ループを終了するはずですが、ファイルがなくなると 'undef'を返します。
しかし、これまでのある時点で、defined()
のこのテストは必要なくなりました。後者のバージョンが関係なく動作するようにする特別なケースコードがあるようです。
これはどのように動作しますか?私が代わりにfoo()
を呼び出してreaddir()
への呼び出しを置き換える場合
不思議なことに、:がループを私が期待する何をすべきか、そして終了しない
sub foo
{
my ($dir) = @_;
return readdir($dir);
}
while (my $file = foo($dir)) {
...
}
、コードファイルは0」という名前のとき" 見つかった。
(MacOS Xの10.5.6にはPerl 5.8.9でテスト済み)
+1を::逆パースここ速記ループを使用してファイルがあります特定のドキュメントへのリンク。私は人間のperlsynでそれを見つけることができません。 – Alnitak
B :: Deparseをクリックしてperlsynをクリックすると、動作を文書化しているperlsynのセクションが表示されます(より明示的に書かれたバージョンのPerlのショートハンドを探してください)。どこかに良い文書がありますが、私はどこにいるのか覚えていません。 –
これをカバーするperlopセクションへのリンクを追加しましたが、readdirが同じ扱いを受ける理由についての特定のドキュメントはまだありません。 –