my %way_of = ( the_sword => sub{do('sword',@_)}, the_gun => sub{do('gun',@_)}, "" => sub{do('default',@_)}, ); my $what = $something; my $stuff = $something_else; &{$way_of{$what} || $way_of{""}}($stuff); #### if ($what eq 'the_sword') { do('sword', $stuff); } elsif ($what eq 'the_gun') { do('gun', $stuff); } else { do('default', $stuff); }