アトリビュートの型変換

User.pm

 package User;
 use Mouse;
 use Mouse::Util::TypeConstraints;
 use URI;
 
 subtype 'My::Types::URI' => as class_type('URI');
 coerce 'My::Types::URI' => from 'Str' => via { URI->new($_); };
 has 'uri' => ( is => 'rw', isa => 'My::Types::URI', default => sub { URI->new }, coerce => 1 );
 
 __PACKAGE__->meta->make_immutable();
 1;

main.pl

 my $user = User->new( uri => 'http://www.yahoo.co.jp/' );
 say ref $user->uri;

説明

  • subtypeで新しい型名(My::Types::URI)と元になる型名(URI)を定義する。
    • => class_type('URI') はシンタックスシュガーで、=> as 'Object' => where { $_->isa('URI') } とも書ける。
  • coerceで型変換を定義する。
  • hasの中でcoereにフラグを立てて、型変換を有効にする。
  • subtypeはhasより前に記述する。

参考

http://perldoc.perlassociation.org/pod/Moose-Doc-JA/Moose/Cookbook/Basics/Recipe5.html


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS