MooseX::Methodで引数チェック
perlcodesampleさんのをMooseX::Methodで書いてみました。
http://d.hatena.ne.jp/perlcodesample/20080702#seeall
MooseX::Methodだと、宣言的に書けて美しいですね。コード量もかなり短くなっています。
#!/usr/bin/env perl use strict; use warnings; { package Foo; use MooseX::Method; method conf => named( mode => { isa => 'Int', required => 1 }, warn => { isa => 'Int', required => 1 }, ) => sub { my ( $self, $args ) = @_; print "called !!! \n"; }; } Foo->conf( mode => 1, warn => 0 ); # 引数名が間違ってる(引数が不足と同じだけれど) eval { Foo->conf( moda => 1, warn => 0 ); }; if ($@) { warn $@; } # 引数の型が違う eval { Foo->conf( mode => 'Hello', warn => 0 ); }; if ($@) { warn $@; } # 引数が不足 eval { Foo->conf( mode => 1 ); }; if ($@) { warn $@; }
実行結果
called !!! Parameter (mode): Must be specified at moosex_method.pl line 23 Parameter (mode): Argument isn't (Int) at moosex_method.pl line 29 Parameter (warn): Must be specified at moosex_method.pl line 35
Mooooooooooooooooooose