readdir

ディレクトリハンドルからディレクトリの中身を読み取る

構文

解説

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";
}