glob
関数を使うと、カレントディレクトリにあるファイルのリストを取得することができます。
Unix の ls
コマンドの引数に指定するファイル名パターン(*.txt
など)と同様のパターンを、glob
の引数に指定します。
@files = glob '*'; # すべてのファイル名を取得(ドットで始まるものを除く)
@files = glob '.*'; # ドットで始まるファイルすべて
@files = glob '.* *'; # すべてのファイル(ドットで始まるものを含む)
@files = glob '*.txt'; # 拡張子 .txt のファイルすべて
@files = glob '*.txt *.csv'; # 拡張子 .txt と .csv のファイルすべて
for
(foreach
) ループで使用するときは下記のように記述できます。
for (glob '*.txt') {
print $_, "\n";
}
絶対パスでディレクトリを指定すれば、カレントディレクトリ以外のファイルを列挙することもできます。
この場合、glob
の返すファイル名には、引数で指定したディレクトリの名前が含まれます。
my $dir = '/home';
@files = glob "$dir/*.txt"; # ('/home/a.txt', '/home/b.txt') など
古いバージョンの perl では、glob
関数に名前が付けられていなかったため、次のようにファイルハンドルと同じように <>
で表現されていました。
@files = <*.txt *.csv>; # glob '*.txt *.csv'; と同じ