Обратный вызов, связанный с on_fail
, не должен возвращать значение. Предполагается, что die
в некотором роде.
В документации Params :: Validate приведено следующее объяснение обратного вызова on_fail
:
on_fail => $callback
Если дано, этот обратный вызов будет вызван
всякий раз, когда проверка не проходит. Это
будет вызываться с одним
параметр, который будет строкой
описывая неудачу. Это полезно
если вы хотите, чтобы этот модуль бросил
исключения как объекты, а не как
строки, например.
Ожидается, что этот обратный вызов умрет ()
внутренне. Если это не так,
проверка будет продолжена, с
непредсказуемые результаты.
По умолчанию просто использовать карпа
Функция confess () модуля.
(акцент мой)
Следующий код работает, заключая процедуру проверки в блок eval
:
use strict;
use warnings;
use Params::Validate qw{ :all};
my $return_value = insertUser('user','password','user@example.com'); #passes
print "return value: $return_value\n";
my $error_return_value = insertUser('user*','password','user@example.com');
print "error return value: $error_return_value\n";
sub insertUser{
eval{
my ( $username, $password, $email, $name) = validate_pos( @_,
{
type => SCALAR,
regex => qr/^\w+$/,
on_fail => sub{ die "username validation failed"},
},
{ type => SCALAR },
{ type => SCALAR },
{ type => SCALAR ,optional => 1,default => 99});
print "$username, $password, $email, $name \n";
};
if($@){
return 0;
}else{
return 1;
}
}
Выходные данные:
user, password, user@example.com, 99
return value: 1
error return value: 0