if $number is a key in the hash, print its value, end of the history else you need to reduce the problem while $number is not undef extract the last number of the chain with pop if the popped number = 0 forget this number else my $units = this number pop again if you have a zero: good bye zero! else my $teen = this number *10 pop again if you have a zero: good bye zero! else my $hundred = this number my $thereis_a_hundred = true; ... etc, etc ... pop again ... oups, nothing left to pop, we obtain undef and exit the loop, my $googolplex = ''; # this variable was not reached, its value is still the null string, so if you print it nothing occurs } ## print all variables you have collected in reversed position and add some extra strings ## first whe prepare the extra chains, this could be done before also if ($there_is_hundred is true){my $hundred_str = "hundred and "} else {$hundred_str = ''}; if ($there_is_thousand is true){my $thousand_string = " thousand, "} else {$thousand_string = ''}; # ... etc # we finish print ....... %number[$thousand] $thousand_string %number[$hundred] $hundred_str %number[$teen], %number[$unit]; # and we close all with the required "}"