my ($meth,@parts)=/.../; exists($dispatch{$meth}) and $disptach{$meth}->(@parts); #### sub blah { $foo->SUPER::blah(@_); ... } #### use warnings::register; #### sub foo { my $array_ref=shift; ref($array_ref) ne "ARRAY" and die "Can't use anything but an array"; ... }