MooseX::Types::Path::Classが地味に便利

何かしらのパスをオブジェクトに持たせる事は往々にしてある。

でそのオブジェクトがMooseで実装されているのであればMooseX::Types::Path::Classを使うのが地味にすんげー便利。

package MyObject;
use Moose;
use MooseX::Types::Path::Class qw{File Dir};

has file_path => (
    is     => 'rw',
    isa    => File,
    coerce => 1,
);

has dir_path => (
    is     => 'rw',
    isa    => Dir,
    coerce => 1,
);

my $obj = MyObject->new( 
    file_path => '/foo/bar.yaml',
    dir_path  => '/foo/baz/',
);

print ref $obj->file_path; # Path::Class::File
print ref $obj->dir_path;  # Path::Class::Dir

と、このようにパス文字列渡すだけでPath::Classのオブジェクトになってくれる。

ちなみにFileやDir等の名前空間の汚染がイヤなら

use MooseX::Types::Path::Class;

has file_path => (
    is     => 'rw',
    isa    => 'Path::Class::File',
    coerce => 1,
);

でも良い。