У меня есть атрибут, и я хотел бы заставить принудительное срабатывание при каждом входном значении. До 0,72 это было сделано путем принуждения Str
от Str
. Когда эта функция была удалена, я прибег к жесткому взлому файла Meta::TypeConstraint
, чтобы рабочий код работал. С момента выпуска Moose 2.0
Раньше я просто вносил это изменение, комментируя return $_[0] if $self->check($_[0]);
sub coerce {
my $self = shift;
my $coercion = $self->coercion;
unless ($coercion) {
require Moose;
Moose->throw_error("Cannot coerce without a type coercion");
}
#return $_[0] if $self->check($_[0]);
return $coercion->coerce(@_);
}
Однако сделать то же самое изменение в Moose v2 не получится. Я использую эту функцию для полей, которые, как я знаю, я хочу очистить с помощью регулярных выражений. Однако не имеет смысла проверять, соответствуют ли они, потому что (почти) ни один из них не будет соответствовать. Я использую этот метод для простых вещей, таких как выполнение регулярного выражения в строке или переформатирование строки (которая может представлять денежную запись в реальном мире для чего-то, что может использовать БД).