* 型制約 - subtype[#ddb4f265]
* 型制約 (subtype)[#ddb4f265]
*** Num.pm [#j22644c7]
package Num;
use Mouse;
use Mouse::Util::TypeConstraints;
has 'num1' => (
is => 'ro',
isa => 'Int',
);
subtype 'PositiveInt'
=> as 'Int'
=> where { $_ > 0 }
=> message { "The number you provided, $_, was not a positive number" };
has 'num2' => (
is => 'ro',
isa => 'PositiveInt',
);
__PACKAGE__->meta->make_immutable();
*** main.pl [#iaea632a]
my $num = Num->new(num1 => -10, num => -20);
** 説明 [#t7acc871]
- hasでアトリビュートを記述する際にisaで型制約を指定する事が出来る。
- 型は組み込みで色々と用意されているが、subtypeで独自の型を定義する事も出来る。
- asで基底の型を、whereで制約を、messadeで型違反時のメッセージを定義する。
** 参考 [#q0c6b081]
- http://search.cpan.org/perldoc?Moose::Util::TypeConstraints
- http://perl-mongers.org/2010/02/the-fastest-way-to-mastering-moose-and-mouse.html
-- 組み込みの型
Any : 制約なし
Maybe[TypeName] : UndefかTypeName
Item : 制約なし
Bool : 真偽値
Undef : 未定義(取扱注意)
Defined : 真値
Value : プリミティブ値
Num : 数値('NaN', 'Inf', '0 but true'などはStr型)
Int : 整数
Str : 文字列
RoleName : ロード済みのロール名(Moose 0.84+では非推奨)
ClassName : ロード済みのクラス名
Ref : リファレンス
ScalarRef : スカラーリファレンス
ArrayRef or ArrayRef[TypeName] : 配列リファレンス
HashRef or HashRef[TypeName] : ハッシュリファレンス
CodeRef : コードリファレンス
RegexpRef : 正規表現リファレンス
GlobRef : グロブリファレンス
FileHandle : ファイルハンドル
Object : オブジェクト
Role : ロール