sub validate { my $input = shift; my %arg = @_; for (@{$arg{as}}) { my $func = "validate_$_"; my $package = __PACKAGE__ . '::'; no strict 'refs'; if (exists ${ $package }{$func}) { $func = *{ ${ $package }{$func} }{CODE}; return unless $func->($input); } else { # throw exception and/or return } } warn "validated $input"; return 1; }