OSに依存しないファイル名の作成
OSに依存しないファイル名を作成するにはFile::Specモジュールのcatfileメソッドを使用します。
use File::Spec; my $file_name = File::Spec->catfile('t', 'test1.t');
ファイル名の規則は、OSによって異なります。/ や \ を使ってファイル名を構成してしまうと、OS間での移植性が損なわれます。File::Specモジュールを使えば、実行しているOSに応じたファイル名の規則にしたがって、ファイル名が作成されるので、異なるOSに移植しても、手直しが発生しません。
updirメソッドを使用するとOSに依存しない「1階層上のディレクトリ」を表現することができます。
File::Spec->updir
UnixでもWindowでも、1階層上のディレクトリの表現は、 .. ですが、もしかしたら、他のOSでは、表現が異なるかもしれません。
サンプル
OSに依存しないファイル名を作成するサンプルです。
use strict; use warnings; # OSに依存しないファイル名を作成する use File::Spec; print "1: OSに依存しないファイル名を作成する。\n"; # Unix では 、lib/test1.t となり、 # Windowsでは、lib\test1.t となる。 my $file_name = File::Spec->catfile( 't', 'test1.t' ); print "\$file_name = $file_name\n\n"; print "2: OSに依存しない「1階層上のディレクトリ」を表\現する。\n"; my $up_dir = File::Spec->updir; print "\$up_dir = $up_dir\n\n"; print "3: このスクリプトの、1階層上の、lib というディレクトリ名を作成する。\n"; use FindBin; my $lib_dir = File::Spec->catfile($FindBin::Bin, File::Spec->updir, 'lib'); print "\$lib_dir = $lib_dir\n\n";
(参考)FindBin