sub validate_data($$) { my $q = shift; my $tmpl = shift; my %data = (); my %invalid = (); foreach my $key (keys %{$tmpl}) { my $value = $q->param($key); if (&{$tmpl->{$key}}($value)) { $data{$key} = $value if defined $value; } else { $invalid{$key} = 1; } } return (\%data, \%invalid); }