を利 用しています use Mouse::Util::TypeConstraints qw( enum ); use Mouse::Util::TypeConstraints qw( enum ); enum RGBColors => qw( red green blue ); enum RGBColors => qw( red green blue );
ないかを判定するCodeRef くらいです use v5.28; use v5.28; use warnings; use warnings; use utf8; use utf8; use Mouse::Util::TypeConstraints qw( enum find_type_constraint ); use Mouse::Util::TypeConstraints qw( enum find_type_constraint ); use DDP +{ deparse => 1, use_prototypes => 0 }; use DDP +{ deparse => 1, use_prototypes => 0 }; enum RGBColors => qw( red green blue ); enum RGBColors => qw( red green blue ); my $type_constraint = find_type_constraint('RGBColors'); my $type_constraint = find_type_constraint('RGBColors'); say $type_constraint->name; say $type_constraint->name; say 'Pass' if $type_constraint->check('red'); say 'Pass' if $type_constraint->check('red'); # check メソッドで渡された引数が、型制約を満たすかをチェックする関数が入っているインスタンス変数 # check メソッドで渡された引数が、型制約を満たすかをチェックする関数が入っているインスタンス変数 # アクセサを通して取得していないのですでにヤバそうな雰囲気がある # アクセサを通して取得していないのですでにヤバそうな雰囲気がある p ¥$type_constraint->{compiled_type_constraint}; p ¥$type_constraint->{compiled_type_constraint};
utf8; use utf8; use Mouse::Util::TypeConstraints qw( enum find_type_constraint ); use Mouse::Util::TypeConstraints qw( enum find_type_constraint ); use DDP +{ deparse => 1, use_prototypes => 0 }; use DDP +{ deparse => 1, use_prototypes => 0 }; enum RGBColors => qw( red green blue ); enum RGBColors => qw( red green blue ); my $type_constraint = find_type_constraint('RGBColors'); my $type_constraint = find_type_constraint('RGBColors'); use PadWalker qw( peek_sub ); use PadWalker qw( peek_sub ); my $valid = peek_sub($type_constraint->{compiled_type_constraint})->{'%valid'}; my $valid = peek_sub($type_constraint->{compiled_type_constraint})->{'%valid'}; p [ keys %$valid ]; p [ keys %$valid ];