sub foo {}
sub bar {}
sub baz {}

sub pick_at_random {

    my %table = @_;
    return ( values %table )[ rand( keys %table ) ];
}

my %lookup = ( A => \&foo,
               B => \&bar,
               C => \&baz );

my $selected = pick_at_random( %lookup );

print $selected == \&foo ? "Got 'foo'" :
    $selected == \&bar ? "Got 'bar'" :
    $selected == \&baz ? "Got 'baz'" :
                         "Got nadda" ;