0

渡されたデータ構造を真/偽の値に減らす基本的なテストの構造化された入力から coderefs を作成できる既存の CPAN ライブラリはありますか? 渡された属性をコンストラクターから渡されたデータ構造の属性に[attribute => 'something']マップし(つまり、以下の例$_->{something}では、渡されたスカラーにマップします)、それらに対してテストを実行できる必要があります。

私は何かを書くことができましたが、CPAN でそれを処理するものが見つからないことに本当に驚いています。この種のことを行うライブラリを知っている人はいますか?

my @def = ( [ [ attribute => 'something' ], '>', 50 ],
            'and',
            [ [ attribute => 'something_else' ], 'eq', 'match' ],
          );

my $coderef = Reducer->new(@def);

my @items = ( { something => 75,
                something_else => 'match',
              },
              { something => 20,
                something_else => 'match',
              },
              { something => 75,
                something_else => 'no match',
              },
              { something => 90,
                something_else => 'match',
              },
            );

for my $item (@items) {
  $coderef->($item) ? say 'true' : say 'false';
};

出力:

true
false
false
true
4

1 に答える 1

0

この問題については何もありませんし、実際にあなたのサンプルコードは私へのcoderefによって解決されることを叫びます。定義と項目の両方をパラメーターとして検証するサブルーチンを見つける可能性が高くなります。

私はそれらのいくつかがあることを知っています。最初に頭に浮かぶのは、Params :: Validate::validateです。

定義構造はあなたのものとは異なりますが(配列ではなく検証仕様への属性のハッシュなど)、目的のインターフェースをその周りにラップするのは簡単です。

package Params::Validate::Reducer;
use strict;
use warnings;
use Params::Validate ();
sub new {
    my ($class, $def) = @_;
    sub {
        !! eval {
            Params::Validate::validate(@_, $def);
            1;
        }
    }
}
于 2011-07-15T16:48:02.113 に答える