Page Top


NAME

Path::Class - クロスプラットフォームでのパス指定の操作

Page Top


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: $!";

Page Top


DESCRIPTION

Path::Classファイルとディレクトリ指定操作(文字列でそのロケーションを記述すると'/home/ken/foo.txt'あるいは'C:\Windows\Foo.txt'などとなるような)をクロスプラットフォームの作法で行うためのモジュールです。 Unix、Windows、Mac、VMS、Epoc、Cygwin、OS/2、そしてNetWareを含む、Perlが動くほとんどあらゆるプラットフォームをサポートします。

また、よく知られているFile::Specモジュールもこのサービスを提供しますが、使い勝手にちょっと不恰好な部分があり、しばしば利用しなかったり、当人がテストしたものとは大きく異なったプラットフォームでは実際には動作しない方法で使ったりする人もいます。

実際、Path::Classは内部ではFile::Specを使用し、見栄えの悪い細かな部分をラッピングしますので、利用者は自分のアプリケーション・コードに集中できます。 File::Specは共通的なパス操作のための関数を提供しますが、Path::Classはそれらの基本的な意味論の世界からのオブジェクト指向のモデルを提供します。 File::Specは一切のオブジェクトを作成しませんし、このクラスは各種のプラットフォームで異なった(そして非常に直感的でないコンセプトの)パスの操作方法を提示します。 Path::Classはファイルおよびディレクトリをあらわすオブジェクトを作成し、これらを相互に関連付けたメソッドを提供します。 例えば、次のようなFile::Specコード:

 my $absolute = File::Spec->file_name_is_absolute(
                  File::Spec->catfile( @dirs, $file )
                );

Path::Classを以下のように使って、

 my $absolute = Path::Class::File->new( @dirs, $file )->is_absolute;

あるいは以下のように使って書くことができます。

 my $absolute = file( @dirs, $file )->is_absolute;

Path::Classを使用すると、同様の読み易さの改善がいたるところで起こるでしょう。

Path::Classの使用が、あなたのコードの本当の問題 - 例えば、File::Specを使ったコードの書き込み時に、何人が実際に``volume''(WindowsでのC:のような)を自分のアカウントに取り込んでいるか - を解決する助けにもなるでしょうか? そうはならないでしょう。 しかし、Path::Classを使うと、ファイルおよびディレクトリオブジェクトが、自身がどのボリュームを参照しているかを把握し、正しい振る舞いをするようになるでしょう。 Path::Classコードの肝は、Path::Class::FileおよびPath::Class::Dirモジュールに息づいていますので、使い方の詳細についてはこれらのドキュメントをお読み下さい。

EXPORT

以下の関数がデフォルトでエクスポートされます。

file

Path::Class::File->newの別名です。

dir

Path::Class::Dir->newの別名です。

このエクスポートをやめさせるには、useに明示的に空のリストを渡して、つまりuse Path::Class ().のようにしてください。

以下はオンデマンドでエクスポートされます。

foreign_file

Path::Class::File->new_foreignの別名です。

foreign_dir

Path::Class::Dir->new_foreignの別名です。

Page Top


Notes on Cross-Platform Compatibility

このモジュールではクロスプラットフォームにやさしいコードをFile::Specよりずっと簡単にかけますが、まだいくつか、注意すべき問題があります。

Page Top


AUTHOR

Ken Williams, KWILLIAMS@cpan.org

Page Top


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.

Page Top


SEE ALSO

Path::Class::Dir, Path::Class::File, File::Spec

Page Top


DOCUMENT TRANSLATION

Makio Tsukamoto, tsukamoto@gmail.com

Page Top