# Hash of coderef solution (recommended). use strict; use warnings; my %op_table = ( edit => sub { my $z = shift; print "in EditHandler, z=$z\n"; return 1; }, chmod => sub { my $z = shift; print "in ChmodHandler, z=$z\n"; return 2; } ); sub invoker { my ($name, $z) = @_; exists($op_table{$name}) or return -1; $op_table{$name}->($z); } # Example calls. invoker("edit", 42); invoker("chmod", 99); invoker("fred", 7); # returns -1