use constant EMPTY => 0; $bottles{beer} = 99; sub take_one_down { return --$bottles{beer}; } sub pass_around { print "No more beer\n" and exit($bar) if ($bottles{beer} eq EMPTY); } print "$bottles{beer} on the wall\n"; while ($bottles{beer}) { take_one_down($bottles{beer}); pass_around($bottles{beer}); print "$bottles{beer} on the wall\n"; }

Actually takes the beer off your wall.

UPDATE: Since I am seem to be getting some flak. I decided to write this one in an effort to be slightly more visually poetic while still running. Of course there are many ways to do it (that's what makes Perl so great), I just wanted something up there that read more poetically.