ディレクトリハンドルからディレクトリの中身を読み取る
readdir
は、リストコンテキスト (戻り値をリストで受け取る状況) なら、
opendir
を使って開いたディレクトリの中にあるすべてのエントリを返します。
もしエントリがなければ、空のリストを返します。
opendir my $dh, './sample';
my @files = readdir $dh;
print join( "\n", @files ), "\n";
上記コードは次のような結果を出力します。
.
..
test1.txt
test2.txt
ご覧の通り、カレントディレクトリを表す .
と、親ディレクトリを表す ..
も含まれます。
readdir
は、スカラーコンテキスト (戻り値をスカラーで受け取る状況) なら、
opendir
を使って開いたディレクトリから次のエントリを返します。
前述のコードは次のコードと同じことをします。
opendir my $dh, './sample';
while ( my $file = readdir $dh ) {
print $file, "\n";
}
なお、Perl 5.12 以降であれば、上記コードの while
の条件式で裸の
readdir
を使うこともできます。
つまり、戻り値を明示的に変数で受け取らず、暗黙的に $_ で受け取ることができます。
while ( readdir $dh ) {
print $_, "\n";
}