The map and pop suggestions work (very nice)... The $_ trick wont though, because (get this) $_ isn't actually empty at that point, it contains a single newline. Interestingly enough /^$/ will match a single newline.
perl -le '$_ = "\n"; print /^$/'
1
So, a tested version of your code comes in at 69 chars....
# 1 2 3 4 5 6
#23456789012345678901234567890123456789012345678901234567890123456789
map{$n=$o=$_;for$c(@_){$n+=s/$c//}/^$/&&push@{$w[$n]},$o}<D>;@{pop@w}
Update:
The following code illustrates the issue a bit better...
Notice how /^$/ && is not identical to $_ || and in this example the difference is critical:
#!/usr/bin/perl -wT
use strict;
my @arr = ("\n","dog\n","cat\n");
my $patternmatch = 0;
my $underscorematch = 0;
/^$/ && $patternmatch++ for @arr;
$_ || $underscorematch++ for @arr;
print "Patternmatch = $patternmatch\n"; # <== prints 1
print "Underscorematch = $underscorematch\n"; # <== prints 0
-Blake
|