in reply to recursive join

If you use the concat operator . in its mutator form .= then you don't need to preinitialize the variable. The mutator forms of the plus (+= and ++) and minus (-= and --) operators as well as the concatenation operator are special cased so that they dont raise a warning when the variable they act on is undefined.
use warnings; use strict; my ($str,$x,$y,$c,$d); $str.=chr($_) for 65..90; $x++; --$y; $c += 10; $d -= 2; print "$str $x $y $c $d\n"; __END__ ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 -1 10 -2
I believe this is because things like
$hash{foo}.=$foo; next if $dupe{$_}++;
are so common.

And just to nitpick, but there's no recursion in your example. ;-)

--- demerphq
my friends call me, usually because I'm late....