c:\@Work\Perl\monks>perl -MData::Dump -le "use warnings; use strict; ;; { package Dispatch; ;; sub _x_foo { hiya(@_); } sub _x_bar { hiya(@_); } ;; my %disp = map { my $agent = qq{_x_$_}; $_ => __PACKAGE__->UNIVERSAL::can($agent) || die qq{dispatch via unknown agent '$agent'}; } qw(foo bar BAM) ; ::dd \%disp; ;; sub me { my $tag = shift; ;; die qq{unknown dispatcher '$tag' used} unless exists $disp{$tag}; ;; return $disp{$tag}(@_); } ;; sub hiya { print 'hi from ', (caller(1))[3], qq{ (@_)}; } } ;; Dispatch::me('foo'); Dispatch::me('POW', qw(x y z)); Dispatch::me('bar', 99, 88); " dispatch via unknown agent '_x_BAM' at -e line 1.