Having not seen it listed, here's yet another way to do it
my @arr1 = ("foo", "", "bar", "", "baz");
my @arr2 = grep $_, @arr1;
{
$" = ', ';
print "@arr1\n@arr2\n";
}
Since this tests for each element in a boolean context, it will ignore any element perl considers to be false, which includes empty strings (""). However this also has the pitfall of dropping stuff you might want to keep e.g qw(0 1 2) --> (1 2).
That was the more "perlish" way to do it, but if you're determined to use a loop try this
my @arr1 = ("foo", "", "bar", "", "baz");
my @arr2;
foreach (@arr1) {
push @arr2, $_ if $_ ne '';
}
HTH
broquaint |