readdir関数 - ディレクトリの内容を読み込む
ディレクトリの内容を読み込むにはreaddir関数を使用します。
readdir ディレクトリハンドル
ディレクトリハンドルはopendir関数によって取得されたものを指定します。戻り値として、ディレクトリの中にあるファイル名が返されます。繰り返し呼び出すことで、ディレクトリの中のすべてのファイルを読みこむことができます。
opendir関数でディレクトリハンドルを取得して、readdir関数で、すべてのファイルを読み込むサンプルプログラムを書いてみます。
# ディレクトリ名 my $dir = 'study'; # ディレクトリオープン opendir my $dh, $dir or die "Can't open directory $dir: $!"; # すべてのファイルを読み込む while (my $file = readdir $dh) { print "$file\n"; }
出力結果は以下のようにディレクトリに含まれるファイル名の一覧になります。
. .. a.txt b.txt
カレントディレクトリを表す「.」と一つ上の階層のディレクトリを表す「..」が含まれていることに注意してください。
通常は「.」も「..」も必要ないと思います。ですのでnext文を使って、この二つに該当する場合はスキップしましょう。
# すべてのファイルを読み込む while (my $file = readdir $dh) { next if $file eq '.' || $file eq '..'; print "$file\n"; }
これで望んだ結果が得られます。
出力せずに、ファイル一覧を配列にしたい場合は次のように書くといいです。
my @files; while (my $file = readdir $dh) { next if $file eq '.' || $file eq '..'; push @files, $file; }