I've hacked it a bit to fix the error, I think this is still in the spirit the author had intended:
Replace in
sub z:
($b & $m[$p]) ne $a?return:substr($b, $p, 1) = "1";
$d == 8?$s .= "$b|" if $s !~ /$b/:&z($_, $d+1) for 0..63;
With:
if (($b & $m[$p]) ne $a) { return; }
else { substr($b, $p, 1) = "1"; }
if ($d == 8) { $s .= "$b|" if $s !~ /$b/; }
else { &z($_, $d+1) for 0..63; }
The errors go away on Perl 5.6.
Is it proper to use return in that kind of switch? I'd assume its not because of the error, but do many of you use ? : instead of branching with if/else? This may have just been the author's attempt at obfuscating the code... *shrug*