Perlには、Data::Checks, Type::Tiny, Mooseなど型制約を司るライブラリが複数あります。大型のプロジェクトだと、時代の変遷からか複数の型制約が混在することがあると思います。また、最近のPerlだと、class featureのCorinna プロジェクト に続いて、値のチェックを行う Oshun プロジェクト が進行しています。( Data::Checks は、このプロジェクトの試作品です。)こういったPerl本体の動きに乗りやすくするためにも、複数の型制約を統一的なインターフェースで扱えると良いのではないかと思いました。
そこで、今回、Data::Checks, Type::Tiny, Moose などの様々な型制約を一箇所に保存し、取り出せる kura をリリースしました。kura は蔵です。
Data::Checks -----------------> +--------+ | | Type::Tiny -------------------> | | | Kura | ---> Named Value Constraints! Moose::Meta::TypeConstraint --> | | | | YourFavoriteConstraint -------> +--------+
以下のような感じで、使えます。use kura
を type
と心の目で置き換えて読めば、静的型付け言語の型宣言と似た感じに読めるはずです!たぶん。
package MyFoo { use Types::Standard -types; use kura Name => Str & sub { qr/^[A-Z][a-z]+$/ }; use kura Level => Int & sub { $_[0] >= 1 && $_[0] <= 100 }; use kura Charactor => Dict[ name => Name, level => Level, ]; } package main; use MyFoo qw(Charactor); Charactor->check({ name => 'Alice', level => 50 });
よかったら使ってください!