$Data{gen} = { 'beholder' => {b => 1, pg => 21}, 'death kiss' => {pg => 21}, ... }; #### sub random { my ( $key ) = @_; my @choices = keys %{$Data{$key}}; my $chosen = $choices[rand @choices]; return $Data{$key}{$chosen}; # or maybe just return $chosen ? } #### my $output = my $randomkey = random( "gen" ); #### $output .= " beholder" unless ( exists( $Data{gen}{$randomkey}{b} )); #### my $addon = ''; if ( exists( $Data{gen}{$randomkey}{bk} ) or exists( $Data{gen}{$randomkey}{pg} )) { $addon = $Data{gen}{$randomkey}{bk} || 'Monstrous Manual'; $addon .= ", page $Data{gen}{$randomkey}{pg}" if ( exists( $Data{gen}{$randomkey}{pg} )); } $output .= " ($addon)" if ( $addon );