まくまくPerlノート
グロブよってファイル名のリストを取得する (glob)
2008-03-25

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'; と同じ
2008-03-25