File::Spec::Functions

ファイル名を操作する

仕様的にはFile::Specと同じ。File::Specは関数をエクスポートしないので、File::Spec->関数名形式でしか呼び出せない。File::Spec::Functionsは、File::Specの全ての関数をエクスポートする。

プラットフォームによってFile::Spec:Unixや、File::Spec::Win32など異なるパッケージが存在し、実行環境によって適切なパッケージの関数がエクスポートされるので、マルチプラットフォーム対応ができる。ただ、Linuxだけで使うならば、実際上役に立つのはcatfileくらいか?splitpathもあるが、File::Basenameがお勧め。

use File::Spec::Functions qw/:ALL/;
パッケージをロードして関数をエクスポートする。

my $path = catfile(@nodes);
@node内のディレクトリ名とファイル名を全て連結してパス名を作成する。
catfile('/home/','/usera/','/public_html') の様に'/' が重複していても正しく連結する。先頭の'/'は除去されないが、末尾の'/'は除去される。

my $path = catdir(@node);
@node内のディレクトリ名を全て連結してパス名を作成する。
Linux上で確認する限り、catfileと同じ動作をするようである。他のOSでは違う場合があるのかも?

my $cwd = curdir();
カレントディレクトリを表わす文字列を返す。Linuxでは"."。

my $root = rootdir();
ルートディレクトリを表わす文字列を返す。Linuxでは"/"。

my $updir = updir();
親ディレクトリを表わす文字列を返す。Linuxでは".."。

my @path = path();
環境変数PATHに指定されているパスを配列に分解して返す。

my $rel = abs2rel($abs, $base);
絶対パスを相対パスに変換する。$baseを省略した場合カレントディレクトリからの相対パスと見なされる。

my $abs = rel2abs($rel, $base);
相対パスを絶対パスに変換する。$baseを省略した場合カレントディレクトリからの相対パスと見なされる。但し、完全な絶対パスに変換されない。rel2abs('..','/home')の変換結果は、'/home/..'。役にたつ場面があるとは思えない。
相対パス→絶対パス変換は、Cwd のabs_pathを使うべし。