=encoding utf8 =head1 NAME Path::Class - クロスプラットフォームでのパス指定の操作 =head1 SYNOPSIS use Path::Class; my $dir = dir('foo', 'bar'); # Path::Class::Dirオブジェクト my $file = file('bob', 'file.txt'); # Path::Class::Fileオブジェクト # Unixでは'foo/bar'、Windowsでは'foo\bar'などに文字列化 print "dir: $dir\n"; # Unixでは'foo/bar.txt'、Windowsでは'foo\bar.txt'などに文字列化 print "file: $file\n"; my $subdir = $dir->subdir('baz'); # foo/bar/baz my $parent = $subdir->parent; # foo/bar my $parent2 = $parent->parent; # foo my $dir2 = $file->dir; # bob # 外部パスを指定した時の動作 use Path::Class qw(foreign_file foreign_dir); my $file = foreign_file('Mac', ':foo:file.txt'); print $file->dir; # :foo: print $file->as_foreign('Win32'); # foo\file.txt # 基本的なファイルシステムとの対話: # $dir_handleはIO::Dirオブジェクト my $dir_handle = $dir->open or die "Can't read $dir: $!"; # $file_handleはIO::Fileオブジェクト my $file_handle = $file->open($mode) or die "Can't read $file: $!"; =head1 DESCRIPTION Cファイルとディレクトリ指定操作(文字列でそのロケーションを記述するとC<'/home/ken/foo.txt'>あるいはC<'C:\Windows\Foo.txt'>などとなるような)をクロスプラットフォームの作法で行うためのモジュールです。 Unix、Windows、Mac、VMS、Epoc、Cygwin、OS/2、そしてNetWareを含む、Perlが動くほとんどあらゆるプラットフォームをサポートします。 また、よく知られているCモジュールもこのサービスを提供しますが、使い勝手にちょっと不恰好な部分があり、しばしば利用しなかったり、当人がテストしたものとは大きく異なったプラットフォームでは実際には動作しない方法で使ったりする人もいます。 実際、Cは内部ではCを使用し、見栄えの悪い細かな部分をラッピングしますので、利用者は自分のアプリケーション・コードに集中できます。 Cは共通的なパス操作のための関数を提供しますが、Cはそれらの基本的な意味論の世界からのオブジェクト指向のモデルを提供します。 Cは一切のオブジェクトを作成しませんし、このクラスは各種のプラットフォームで異なった(そして非常に直感的でないコンセプトの)パスの操作方法を提示します。 Cはファイルおよびディレクトリをあらわすオブジェクトを作成し、これらを相互に関連付けたメソッドを提供します。 例えば、次のようなCコード: my $absolute = File::Spec->file_name_is_absolute( File::Spec->catfile( @dirs, $file ) ); はCを以下のように使って、 my $absolute = Path::Class::File->new( @dirs, $file )->is_absolute; あるいは以下のように使って書くことができます。 my $absolute = file( @dirs, $file )->is_absolute; Cを使用すると、同様の読み易さの改善がいたるところで起こるでしょう。 Cの使用が、あなたのコードの本当の問題 - 例えば、Cを使ったコードの書き込み時に、何人が実際に"volume"(WindowsでのCのような)を自分のアカウントに取り込んでいるか - を解決する助けにもなるでしょうか? そうはならないでしょう。 しかし、Cを使うと、ファイルおよびディレクトリオブジェクトが、自身がどのボリュームを参照しているかを把握し、正しい振る舞いをするようになるでしょう。 Cコードの肝は、CおよびCモジュールに息づいていますので、使い方の詳細についてはこれらのドキュメントをお読み下さい。 =head2 EXPORT 以下の関数がデフォルトでエクスポートされます。 =over 4 =item file C<< Path::Class::File->new >>の別名です。 =item dir C<< Path::Class::Dir->new >>の別名です。 =back このエクスポートをやめさせるには、Cに明示的に空のリストを渡して、つまりC.のようにしてください。 以下はオンデマンドでエクスポートされます。 =over 4 =item foreign_file C<< Path::Class::File->new_foreign >>の別名です。 =item foreign_dir C<< Path::Class::Dir->new_foreign >>の別名です。 =back =head1 Notes on Cross-Platform Compatibility このモジュールではクロスプラットフォームにやさしいコードをCよりずっと簡単にかけますが、まだいくつか、注意すべき問題があります。 =over 4 =item * いくつかのプラットフォーム、特記すべきものとしてはVMSや、いくつかの古いバージョンのDOS(多分)では、全てのファイル名に拡張子が必要です。 このため、Fというファイルを作成し、それからディレクトリF内のファイルリストを問い合わせると、予想されるFの代わりに、Fというファイルが見つかるでしょう。 したがって、初めての場所では拡張子を使うというのが良い考え方でしょう。 =back =head1 AUTHOR Ken Williams, KWILLIAMS@cpan.org =head1 COPYRIGHT Copyright (c) Ken Williams. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO Path::Class::Dir, Path::Class::File, File::Spec =head1 DOCUMENT TRANSLATION Makio Tsukamoto, tsukamoto@gmail.com =cut