my %dispatch = ( g6 => \&add_one, g7 => \&add_one, g8 => \&add_one, g9 => \&add_one, g0 => \&add_half, g1 => \&add_half, g2 => \&add_half, g3 => \&add_half, g4 => \&add_half, g5 => \&add_half, k0 => \&add_half, k1 => \&add_half, k2 => \&add_half, k3 => \&add_half, k4 => \&add_half, k5 => \&add_half, ); sub add_one { my $total = shift; $total += 1; return $total; } sub add_half { my $total = shift; $total += 1; return $total; }