2011-12-14 53 views
2

我有一个属性,我想对每个输入值进行强制激发。在0.72之前,这是通过强制StrStr完成的。当这个功能被删除时,我采取了硬编码的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(@_); 
} 

然而,使得穆斯V2相同的变化不起作用。我正在使用此功能来处理我想用正则表达式清理的字段。然而,检查它们是否符合是没有意义的,因为(几乎)没有一个符合要求。我使用这种方法来处理简单的事情,比如在字符串上运行正则表达式,或者重新格式化字符串(它可以表示现实世界中的货币符号,以便db可以使用)。

+1

难道你不能只做自己的存取? `foo =>(accessor =>'_foo',handles => {foo => sub {...},},);` – ikegami 2011-12-15 04:28:26

回答

0

我可以想的强制解雇的每个输入想到的唯一原因是,如果您使用的是他们的副作用的强制,在这种情况下,我是指你的时间兑现医生开玩笑:

病人:医生,当我这样做的时候会很痛。
医生:那么不要那样做。

我意识到你可能有很多代码需要修复,但我并不怀疑你最终会得到更简洁的代码。

+0

为什么你认为`s/foo/bar /;`比' s/foo/bar/if/foo /;`。这很愚蠢,而且不必要的慢。 – 2011-12-19 15:34:57