I know it doesn't do it by default, but documentation in various places (including perlfunc, and http://perl.plover.com/book/announce/02 led me to think that you could force it. But the following example does not seem to show the hope-for speedup of tail recursion: print sum(1..20_000); sub sum { my $count = @_; unless ($count % 100) { print "At $count args\n"; } if (@_ > 1) { unshift @_, shift() + shift(); goto ∑ } else { return shift; } } The slowness then characteristic speedup as @_ shrinks indicates that tail recursion is not happening. I verified that it is not due to the operations that am doing by comparing with: print test_shift(1..20_000); sub test_shift { while (@_) { my $count = @_; unless ($count % 100) { print "At $count args\n"; } if (@_ > 1) { unshift @_, shift() + shift(); } else { return shift; } } } So does anyone know why it doesn't work (5.005) and are there plans to make it work efficiently some day? BTW at least one person who tried on 5.6 indicated that there that the first version ran out of memory. The first at least managed to keep memory usage down even if it was slow... Thanks, Ben _________________________________________________________________ Get your FREE download of MSN Explorer at http://explorer.msn.com