我使用Params::Validate进行验证,但是在回调部分而不是定义直接匿名函数,如果我尝试给出该匿名函数的引用,它会直接跳转到错误记录区而不打印消息在块内(在传递正确值的情况下)。
use Params::Validate qw(:all);
our $attributeCallback = sub {
my $parameter = shift;
$parameter =~ m/^\w+$/i ;
};
sub getSingleValue {
eval {
my ($domainName, $attribute) = validate_pos( @_,
{
type => SCALAR,
callbacks => {
'Domain name validation failed' => &$attributeCallback
}
},
{
type => SCALAR,
callbacks => {
'Attribute name validation failed' => sub {
$_[0] =~ m/[\w.-]+$/i }
}
}
);
print "domain name is $domainName and attribute is $attribute";
1;
}
or do {
# catch
# Error Logging Area
};
}
记录的实际错误类似于“Undefined subroutine” ...
任何人都可以告诉为什么会发生这种情况吗?
答案 0 :(得分:5)
{ type => SCALAR, callbacks =>{'Domain name validation failed' => &$attributeCallback } }
$attributeCallback
已经是代码参考。我想你只想说
=> $attributeCallback
而不是
=> &$attributeCallback
&$attributeCallback
会调用该函数,就像说
callbacks => {'Domain name validation failed' => 1 }
答案 1 :(得分:2)
它失败的原因是因为你调用子例程引用并因此使用它的返回值,而不是传递实际引用。而不是使用
&$attributeCallback
使用
$attributeCallback