Если вы начнете использовать Moose
, вы найдете MooseX::Types
по своему вкусу. Типы автоматически имеют is_ $ type () и to_ $ type (). Они предназначены для того, чтобы убедиться, что вы вводите проходные ограничения типа, или чтобы ваш ввод имел действительное приведение к типу. Мне они нравятся лучше даже для таких типов вещей, потому что вы можете гарантировать, что состояние вашего объекта имеет указанные типы без дополнительных затрат.
use Moose;
has 'foo' => ( isa => MyType, is => ro );
sub _check_my_type {
my ( $self, $type ) = @_;
is_MyType( $type );
};
Возможно, не хватает поддержки для глубоких / рекурсивных типов, но если вы используете этот материал в современном Perl, вы, вероятно, «делаете это неправильно». Вместо этого используйте объект, который имеет свои собственные проверки согласованности (как мой выше с MyType), и просто передайте объект.