#!perl -w use 5.10.0; use strict; use Benchmark qw(:all); use Data::Validator; use Params::Validate qw(:all); use Smart::Args; foreach my $mod (qw(Params::Validate Smart::Args Data::Validator)) { print $mod, "/", $mod->VERSION, "\n"; } sub pv_add { my %args = validate( @_ => { x => 1, y => 1 } ); return $args{x} + $args{y}; } sub sa_add { args my $x, my $y; return $x + $y; } sub dv_add { state $v = Data::Validator->new( x => { }, y => { }, ); my $args = $v->validate(@_); return $args->{x} + $args->{y}; } print "without type constraints\n"; cmpthese -1, { 'P::Validate' => sub { my $x = pv_add({ x => 10, y => 10 }); }, 'P::Validate/off' => sub { local $Params::Validate::NO_VALIDATION = 1; my $x = pv_add({ x => 10, y => 10 }); }, 'S::Args' => sub { my $x = sa_add({ x => 10, y => 10 }); }, 'D::Validator' => sub { my $x = dv_add({ x => 10, y => 10 }); }, };