为什么Params :: Validate回调失败了匿名函数引用?

时间:2010-02-11 15:31:24

标签: perl anonymous-function

我使用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” ...

任何人都可以告诉为什么会发生这种情况吗?

2 个答案:

答案 0 :(得分:5)

{ type => SCALAR, callbacks =>{'Domain name validation failed' => &$attributeCallback } }

$attributeCallback已经是代码参考。我想你只想说

=> $attributeCallback

而不是

=> &$attributeCallback

&$attributeCallback会调用该函数,就像说

callbacks => {'Domain name validation failed' => 1 }

答案 1 :(得分:2)

它失败的原因是因为你调用子例程引用并因此使用它的返回值,而不是传递实际引用。而不是使用

&$attributeCallback

使用

$attributeCallback