I'm not sure I want an external source telling me which subs in my package to run without some control over which ones it's allowed to run. A hash of the allowed subrefs with a default error sub makes sense in that context.
use strict;
use warnings;
sub one { print "one\n"; }
sub two { print "two\n"; }
sub tres { # some private sub they don't need to access }
my %dispatch = (
'one' => \&one,
'uno' => \&one,
'two' => \&two,
'dos' => \&two,
'default' => sub { print "sorry, $_[0] not found.\n"; },
);
my @do_these = qw( one two uno dos tres );
foreach my $do_this ( @do_these ) {
if ( exists $dispatch{ $do_this } ) {
$dispatch{ $do_this }->();
} else {
$dispatch{ 'default' }->( $do_this );
}
}