#!/usr/bin/perl use strict; use warnings; my $beholder_default = 'beholder'; my $param = get_param(); my %monster_lookup = ( 'beholder' => { book => 'Monstrous Manual', beholder => 1, page => 21, }, 'death kiss' => { book => 'Monstrous Manual', beholder => 0, page => 21, }, ); # this saves duplicating data in your code my @monsters = keys %monster_lookup; my $monster; if ($param){ $monster = $beholder_default; } else{ my $rand = int rand @monsters; $monster = $monsters[$rand]; } my $book = $monster_lookup{$monster}{book}; my $page = $monster_lookup{$monster}{page}; my $beholder = $monster_lookup{$monster}{beholder}; if (not $beholder){ print "$monster "; } print "beholder ($book, pg $page)\n"; sub get_param { # get your input from somewhere my $param = 0; return $param; }