2010年10月24日

File::Pathモジュールを使う

Perlではディレクトリを作るための組み込み関数として、mkdirが用意されています。使い方は簡単で、関数の引数としてディレクトリ名を渡すと、ディレクトリを作成します。

$ perl -e 'mkdir test'
$ ls -l
...
drwxr-xr-x   2 xxx  staff    68 10 23 22:53 test

とてもシンプルな関数ですが、シンプルすぎて深い階層のディレクトリを一発で作る事ができません。繰り返しmkdirを使う必要が有ります。

しかし、標準モジュールのFile::Pathモジュールを使えば一発で深い階層のディレクトリも作れます。

$ perl -MFile::Path -e 'mkpath("test/test2")'
$ tree
.
└── test
    └── test2

2 directories, 0 files

すでにディレクトリが存在する場合は作成されません。Unixコマンドのmkdir -pと同じです。

気をつけないといけないのは、File::PathモジュールはVer.2.00以降、APIが変わっているところです。

Ver.2.00より前ではmkpath関数が自動的にインポートされますが、Ver.2.00以降は同じ機能を持つmake_tree関数を明示的にインポートして使います。

use File::Path qw(make_tree)
make_tree('test/test2/')

$ perl -MModule::CoreList -e "print Module::CoreList->first_release('File::Path', 2.00);"
5.008009

Ver.2.00が標準モジュール入りしたのはPerl 5.8.9以降なので、古いバージョンを使っていて新しいドキュメントを読んでいると、混乱します(しました...)。

なお、逆にディレクトリを消す関数は、rmtree(Ver.2.00以降はremove_tree)が用意されています。

トラックバックURL

このエントリーのトラックバックURL:
http://ash.roova.jp/mt/mt-tb.cgi/246

コメントする