Path::Class::File - ファイルのオブジェクト表現
use Path::Class qw(file); # 短いコンストラクタのエクスポート my $file = file('foo', 'bar.txt'); # Path::Class::Fileオブジェクト my $file = Path::Class::File->new('foo', 'bar.txt'); # 同様 # Unixでは'foo/bar.txt'、Windowsでは'foo\bar.txt'などに文字列化 print "file: $file\n"; if ($file->is_absolute) { ... } my $v = $file->volume; # Windowsでは'C:'、Unixではから文字列、 # Mac OSでは'Macintosh HD:'など $file->cleanup; # パスネームの論理的なクリーンナップ my $dir = $file->dir; # Path::Class::Dirオブジェクト my $abs = $file->absolute; # 絶対パスへの変換 my $rel = $file->relative; # 相対パスへの変換
Path::Class::Fileクラスはクロス・プラットフォームな方法でのファイル名の操作のための機能を含みます。
新しいPath::Class::Fileオブジェクトを生成し、これを返します。
引数でファイルへのパスを指定します。
何らかのボリュームを最初の引数で、あるいは最初の引数の一部分で指定することができます。
プラットフォーム-ニュートラルな記述:
my $dir = file( 'foo', 'bar', 'baz.txt' );
あるいは、プラットフォーム-ネイティブな記述:
my $dir = dir( 'foo/bar/baz.txt' );
あるいは、この二つの混合ができます:
my $dir = dir( 'foo/bar', 'baz.txt' );
上の三つの例はいずれも、相対パスを生成します。 絶対パスを生成するには、プラットフォーム-ネイティブな次のような記述:
my $dir = dir( '/var/tmp/foo.txt' );
または最初の引数としてから文字列を記述します:
my $dir = dir( '', 'var', 'tmp', 'foo.txt' );
二番目の形式は不恰好に見えるとすれば、それは意図的なことです - 最初に挙げた/var/tmpあるいは\Windowsのようなパスはクロスプラットフォームのコンセプトではなく、もしあなたがコードをクロスプラットフォームにしようとしているなら、おそらくその中に現れるべきではありません。
これが設定ファイル、ユーザ入力、その他から与えられるのであれば、最初の形態はあらゆる意味ですばらしいものです。
このメソッドはPath::Class::Fileが文字列コンテクストで使われたときに自動的に呼ばれるもので、したがって以下は同じことになります:
$string = $file->stringify; $string = "$file";
このオブジェクトにボリューム(例えば、WindowsではC:、Mac OSではMacintosh HD:など)があれば、それを返します。
そうでなければ、空文字列を返します。
ファイル名を、ディレクトリ部分(あれば)抜きの文字列で返します。
このオブジェクトがディレクトリをあらわしているか、boolean(真偽)値で返します。
当然のことですが、Path::Class::Fileは常にfalseを返しますし、Path::Class::Dirは常にtrueを返します。
ファイルが絶対パス指定(/usr/local/foo.txtや\Windows\Foo.txtのように)を指しているか否かに応じて、trueかfalseを返します。
ファイルパスの論理的なクリーンナップを行います。例えば:
my $file = file('/foo//baz/./foo.txt')->cleanup; # $fileは'/foo/baz/foo.txt'をあらわします;
このファイルを含むディレクトリをあらわすPath::Class::Dirオブジェクトを返します。
dir()メソッドの別名です。
$fileを絶対パスであらわしたPath::Class::Fileオブジェクトを返します。
追加引数として、文字列かPath::Class::Dirオブジェクトで、相対パスのベースとして使われるディレクトリを指定することができます。
指定しなかった時は、現在のワーキング・ディレクトリが使われます。
$fileを相対パスであらわしたPath::Class::Fileオブジェクトを返します。
追加引数として、文字列かPath::Class::Dirオブジェクトで、相対パスのベースとして使われるディレクトリを指定することができます。
指定しなかった時は、現在のワーキング・ディレクトリが使われます。
as_foreign($type)
$fileを$typeタイプのシステムで指定した場合のPath::Class::Fileオブジェクトを返します。
既知のタイプにはUnix、Win32、Mac、VMS、そしてOS2、つまりFile::Specにサブクラスがあるすべてのものが含まれます。
生成されたオブジェクト(サブディレクトリ、ファイル、親ディレクトリなど)はこのタイプを保持します。
$fileを$typeタイプのシステムで指定した場合のPath::Class::Fileオブジェクトを返します。
既知のタイプにはUnix、Win32、Mac、VMS、そしてOS2、つまりFile::Specにサブクラスがあるすべてのものが含まれます。
@argsに含まれる引数は、new()で指定されるものと同じです。
$fileを含む与えられた引数すべてをIO::File->newに渡し(この順番でIO::File->openが呼ばれます)、その結果をIO::Fileオブジェクトとして返します。
openが失敗すると、undefが返され$!がセットされます。
openr()
以下を行うためのショートカットです。
$fh = $file->open('r') or die "Can't read $file: $!";
openw()
以下を行うためのショートカットです。
$fh = $file->open('w') or die "Can't write $file: $!";
与えられたファイルが存在すれば、その更新時刻をアクセス時刻をたった今にセットします。存在しない時は、touch()は存在するようにします - YES! - その更新時刻とアクセス時刻は居間にセットされます。
slurp()
スカラコンテキストでは、$fileの内容を文字列で返します。リストコンテキストでは、$fileの内容を($/の設定内容に応じて)行ごとのリストとして返します。ファイルを読めなかった時は、このメソッドは例外を投げます。
ファイルの各行に対してchomp()を行いたいときには、chompまたはchompedパラメータにtrueの値を渡してください:
my @lines = $file->slurp(chomp => 1);
remove()
このメソッドはどのプラットフォームあれできるだけうまく行く方法でファイルの削除を試み、ファイル削除に成功したか否かをboolean値で返します。
remove()は単純にPerlのunlink()関数を呼ぶよりよい方法です。
というのは、いくつかのプラットホーム(特記すべきものとしてはVMS)では、実際にはファイルの全バージョンがなくなるまでunlink()を複数回呼ばなければならないからです。
remove()メソッドは、このプロセスを行ってくれます。
stat()
このファイルに対するFile::stat::stat()を呼び出し、その結果を示すFile::statオブジェクトを返します。
lstat()
stat()と同じですが、$fileがシンボリックリンクの時は、lstat()はリンクの指すファイルの代わりにリンクのstatを行います。
Ken Williams, ken@mathforum.org
Path::Class, Path::Class::Dir, File::Spec
Makio Tsukamoto, tsukamoto@gmail.com