File::Spec - OSに依存しないファイル名を作成



  1. Perl




  2. モジュール



  3. here

File::Specモジュールを使用すると、ファイル名に対して移植性のある処理を行うことができます。たとえばOS固有のファイル名の区切り文字を使ってファイル名を作成したりすることができます。

# モジュールの読み込み
use File::Spec;

File::Specのメソッドはクラスメソッドとして実装されており次の形式で呼び出します。

# クラスメソッド呼び出し
File::Spec->$method;

メソッド

catfile

個々のパーツからファイル名を作成するにはcatfileを使用します。$fileはWindowsの場合は「xxx\yyy\zzz」、Unixの場合は「xxx/yyy/zzz」になります。OS固有の区切り文字がファイル名の作成に使用されます。

# ファイル名の作成
my $file = File::Spec->catfile('xxx', 'yyy', 'zzz');

またディレクトリ名とファイル名を連結するのに利用できます。ディレクトリ名の末尾に「/」や「\」などの区切り文字が存在しているかどうかを意識する必要がありません。

# ディレクトリ名とファイル名を連結
my $dir = 'xxx/yyy/';
my $file = 'zzz';

my $file_abs = File::Spec->catfile($dir, $file);
splitdir

ファイル名を個々のパーツに分解するにはsplitdirを使用します。@partsは('xxx', 'yyy', 'zzz')になります。

# ファイル名を分解
my @parts = File::Spec->splitdir('xxx/yyy/zzz');
File::Specのテクニック

 Windows上でも区切り文字「/」でファイル名を作成したい場合があります。これを実現するにはFile::Spec::UnixをFile::Specの代わりに使用します。

# ファイル名を「/」で連結
use File::Spec::Unix;
my $file = File::Spec::Unix->catfile('xxx', 'yyy', 'zzz');

補足

 標準関数のopen関数等はUnixの区切り文字「/」でも、Windowsの区切り文字「\」でも正しく動作します。ですので単にファイルオープンをすることが目的であればUnixの区切り文字をWindowsの区切り文字に変換する必要はありません。