Perl:命名参数验证最佳实践

Mar*_*cus 3 validation parameters perl named

我在类方法调用中使用命名参数,并想知道是否有最佳实践来确保没有传递未知参数.这就是我在做什么

sub classmethod {
    my $self = shift;
    my %args = (
        "param1" => "default1",
        "param2" => "default2",
        @_
    )

    if (my @invalid = grep { !/^(param1|param2)$/ } keys %args) {
        croak "received unknown arg(s) ".join(",", @invalid)." from ".caller();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一种正确的前进方式,还是会导致性能问题?

最好的,马库斯

Chr*_*ris 5

你可以使用Params :: Validate.另一种选择是Params :: Check

如果params是固定的,那么最好在开发期间验证它们,并选择在实时关闭验证.