use strict; use warnings; use Type::Tiny; my $Is_A_Duck = "Type::Tiny"->new( name => "DuckCheck", constraint => sub { $_->{speech} eq "QUACK" and $_->{walk} eq "WADDLE" }, message => sub { "$_->{name} is not a duck!" }, ); my @candidates = ( {name=>"Daffy", speech=> "QUACK", walk=> "WADDLE"}, {name=>"Daisy", speech=> "QUACK", walk=> "WADDLE"}, {name=>"Donald", speech=> "Bizarre", walk=> "WADDLE"}, {name=>"Platypus",speech=>"QUACK", walk=> "SHUFFLE"}, ); for my $c (@candidates){ if (my $msg= $Is_A_Duck->validate($c)){ print "$_\n" for @{ $Is_A_Duck->validate_explain($c, $c->{name}) }; }else{ print "$c->{name} is a Duck!\n"; } } print "Exiting...\n";