2009-09-16 12 views
10

私は、サブルーチンとメソッドの引数の検証から慎重になる汎用モジュールを探しています。私はCPANの様々な可能性をスキャンしました:Params::ValidateParams::SmartGetargs::MixedGetargs::Long、その他いくつか。サブルーチン引数の検証にはどのPerlモジュールが便利ですか?

これらのモジュールまたは他のモジュールの賛否両論についての情報は高く評価されます。ありがとう。

答えて

6

を使い始めると、好きなように​​が見つかります。型は自動的にis_ $ type()とto_ $ type()を持ちます。これらは、入力が型制約を渡すことを確認するため、または入力が型への有効な強制を持つようにするためのものです。私はあなたがあなたのオブジェクトの状態が上記のタイプを持っていることを保証することができるので、これらのタイプのものであっても、それらをさらに気に入っています。

それは深い/再帰的なタイプのためのいくつかのサポートを欠いているかもしれないが、あなたは、現代perlでこのようなものを使用している場合、あなたはおそらくしている
use Moose; 
has 'foo' => (isa => MyType, is => ro); 

sub _check_my_type { 
    my ($self, $type) = @_; 
    is_MyType($type); 
}; 

「それは間違っています。」代わりに独自の整合性チェック(上記のMyTypeのMyTypeなど)を持つオブジェクトを使用し、オブジェクトを渡すだけです。

+0

もしあなたが使えば、ムースは悪い提案ではありません。あなたができなければ、マウスはムースライトです。これにより、型チェックやその他のいくつかのことが、Mooseの依存関係の全てと、同じコンパイル時のヒットを伴わずに得られます。 明確にするには、私は<3ムースですが、CGIなどでは必ずしも最良の選択ではありません。 – mikegrb

+2

マウスが積極的に開発されていません。それは死んだプロジェクトです(マウスの代わりにMouse.pm Use Mooseのドキュメントに従って)。残念ながら、マウスのドキュメントはCGIのために提案していません! 「コンパイル時のペナルティは、非常に特定のアプリケーションではあまり重要ではありませんが、起動時間が重要なコマンドラインアプリケーションやCGIスクリプトを作成している場合は、可能であれば、代わりにHTTP :: EngineとFastCGIを使用することをお勧めします。 http://rt.cpan.org/Public/Bug/Display.html?id=42203 –

5

MooseX::Method::Signaturesをご覧ください。これは、引数の検証だけではありません。 PODから

例:

package Foo; 

use Moose; 
use MooseX::Method::Signatures; 

method morning (Str $name) { 
    $self->say("Good morning ${name}!"); 
} 

method hello (Str :$who, Int :$age where { $_ > 0 }) { 
    $self->say("Hello ${who}, I am ${age} years old!"); 
} 

method greet (Str $name, Bool :$excited = 0) { 
    if ($excited) { 
     $self->say("GREETINGS ${name}!"); 
    } 
    else { 
     $self->say("Hi ${name}!"); 
    } 
} 

MooseX::Method::SignaturesもPerlのプレートに、よりセクシーな構文をもたらしますMooseX::Declareを標準として来ます。上記のように(だけ簡潔にするために第一の方法を示す)のように書くことができます。

use MooseX::Declare; 

class Foo { 

    method morning (Str $name) { 
     $self->say("Good morning ${name}!"); 
    } 
} 

平野サブルーチンの当然の帰結signatures CPANモジュールもありますが、残念ながらそれは、上記のような特徴として豊富ではありません。

2

私は現在、私はデイブRolsky気づいOP

と同じ質問を研究しています - ムース名声のハイパー生産プログラマは - 最近(2009年)のparams ::検証のメンテナンスを引き継いだので、私はこれを考えます良いサイン。モジュールは2003年以来アップグレードされていません。だから、サブルーチンのパラメータをチェックするためにこれをやり直すことができます。

+0

私はParams :: Validateが好きですが、無効なパラメータを何らかの形で報告するのではなく死ぬことを好まず、スクリプトを実行し続けます... – Marcus

関連する問題