Strangely, using my $l=$_-- and using a(@_[0,2,1,3]) etc. doesn't work at all. @_ is not localised ($_3 ends up very negative and the solution becomes deeply recursive), which makes me wonder if the above solution works. I haven't compared the output to the original solution's output.
Basically, if you think about it, @_ has to be localized. Otherwise if you called a function inside a function (something I hope most of us do) your @_ array would be wiped out, leaving you with the parameters you sent into the child function you just called. The particular behavior your seeing is probably becuase the @_ array contains aliases to scalars.
Second, using 0 based discs is okay, it's easy enough for the user to add 1 in their head (or to start thinking like a cs person.)
Third, and this is where it gets interesting, when removing all the whitespace I can I get (for your solution):
Which just happens to be the same amount of space as (my solution):
so it seems that both solutions are (atleast as far as this little experiment goes) equal. My goal is to squeeze everything that I have now down to 115 or 110 by Tuesday.
Oh and I have compared our outputs, and with the exception of the disc number (mine being one less than yours) they are exactly the same.
Kwyjibo. A big, dumb, balding North American ape. With no chin.