Okay, I just cam across this and had to give it a shot. Mine turns out to be several characters longer than the original, but oh well :)
sub _{"$n bottle@{[$n!=1&&s=>]} of beer".(@_?' on the wall':'!')}$n=po
+p||99;print
_(1).', '._."\nTake one down, pass it around,\n"._(--$n),"!\n\n"and sl
+eep 1while$n;