1use strict; 2use warnings; 3 4use Params::Validate qw( validate SCALAR ); 5use Test::More; 6 7for my $i ( 1 .. 1000 ) { 8 ok( bar(), 'bar()' ); 9 is( foo( foo => $i ), $i, "reentrant validation works ($i)" ); 10} 11 12done_testing(); 13 14sub foo { 15 my %p = validate( 16 @_, 17 { 18 foo => { 19 callbacks => { 20 'call bar' => sub { bar() } 21 }, 22 }, 23 }, 24 ); 25 26 return $p{foo}; 27} 28 29sub bar { 30 my %p = baz( baz => 42 ); 31 32 return $p{baz} == 42; 33} 34 35sub baz { 36 my %p = validate( 37 @_, 38 { 39 baz => { 40 type => SCALAR, 41 callbacks => { 42 'is num' => sub { $_[0] =~ /^\d+$/ }, 43 }, 44 }, 45 }, 46 ); 47 48 return %p; 49} 50