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.

Replies are listed 'Best First'.
Re: 99 Bottles Of Beer
by blazar (Canon) on Oct 14, 2006 at 10:04 UTC
    99 Bottles Of Beer

    Hardly a new thing. Your solution differs from those listed there in that it doesn't simply attempt at producing the wanted output, but is also aimed at being a poem itself. You may want to submit it, but then I recommend you posting a RFC first, perhaps as a meditation, to hear and discuss good advice from other monks.

      Just a note of caution, though: one should be careful since they request the following:

      Please do not send again Java, C or Perl examples - they are already included
Re: 99 Bottles Of Beer
by gellyfish (Monsignor) on Oct 16, 2006 at 12:56 UTC