use CGI qw(:standard); # Validation subroutines defined elsewhere my %DATA = ( field1 => [ param('field1'), \&INTEGER, 1 ], field2 => [ param('field2'), \&EMAIL, 1 ], field3 => [ param('field3'), \&WORD, 0 ], ); sub do_validation { foreach my $key (keys %DATA) { if($DATA{$key}[2]) { my @result = $DATA{$key}[1]->($DATA{$key}[0]); die "Didn't validate: $result[2]" unless $result[0]; } } }