是否有现有的CPAN库能够从基本测试的结构化输入创建coderefs,将传递的数据结构减少为真/假值?它需要能够将构造函数中传递的属性映射到传递的数据结构的属性(即,在下面的示例中[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
答案 0 :(得分: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;
}
}
}