うまいぼうぶろぐ

linuxとhttpdとperlのメモ

Path::Class でfile/directory操作

OSに依存しないパスを作成できる。あとpathの結合とか。(File::Specみたいに)
その他ファイルの読み込みなども可能。ディレクトリ以下のfilename表示もopendir使うよりわかりやすい。

例えば、ディレクトリ下のファイル一覧を取得する場合は$dir->childrenとか。これは".", ".."を含まないのでそのまま使える。

use Path::Class qw(dir file);

my $dir = dir('foo', 'bar');           # linux => foo/bar
my $abs = dir('foo', 'bar')->absolute; # foo/barへの絶対パス
my $rel = $abs->relative;              # 相対パスへの変換
my $rel = $abs->relative('/foo');      # /fooへの相対パス

あと、print $dirとすると文字列に展開されて表示されるけど、実態はPath::Class::Dir(Path::Class::Fileも同じ)のオブジェクトなのでMooseで型チェックしてる場合や、本当に文字列そのものが欲しい場合などは変換しないといけない。

has directory => (
  is => 'rw', 
  isa => 'Str',
  default => $dir->stringify, 
);