2011-12-14 22 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