ROUTE 3390

備忘録的な用途で書いていますが、どなたかの役に立つ事があれば嬉しいです。

Mouse(Moose)で使うMouseX::Types::Path::Classが素敵

今日はMouseX::Types::Path::Classって素敵ですねってはなし。

例えば、ログを吐くディレクトリを今まではこうやって用意してた。

package Sasakure;
use Mouse;

has 'dir' => (
    is       => 'ro',
    isa      => 'Str',
);

__PACKAGE__->meta->make_immutable;
no Mouse;

sub BUILD {
    my $self = shift;
    $self->{dir} = '/var/log/service';
    return $self;
}
1;

MouseX::Types::Path::Classを使う。

package Sasakure;
use Mouse;
use MouseX::Types::Path::Class;

has 'dir' => (
    is       => 'ro',
    isa      => 'Path::Class::Dir',
    coerce   => 1,
);
__PACKAGE__->meta->make_immutable;
no Mouse;

sub BUILD {
    my $self = shift;
    $self->{dir} = '/var/log/service';
    return $self;
}
1;

こうなって何が嬉しいって、渡した文字列(ディレクトリパス)が
Path::Class::Dirのオブジェクトとなってセットされる。
もちろんPath::Class::Fileも指定出来るよ。
素敵ですねーー♪


Path::Class::Dirの使い方はこちら