Here is one approach:
#! perl use Modern::Perl; use Data::Dump; my @array1 = ( undef, undef, 'abcd', 'efgh', undef, undef, 'jklm', 'nopq', undef, undef, ); my @array2 = split /\0\0/, join('', map { $_ // "\0" } @array1); @array2 = @array2[1 .. $#array2] unless $array2[0]; dd @array1; dd @array2;
Output:
21:38 >perl 508_SoPW.pl ( undef, undef, "abcd", "efgh", undef, undef, "jklm", "nopq", undef, undef, ) ("abcdefgh", "jklmnopq") 21:38 >
Update 1: The above assumes that “blank” means undef. If it means '' (the empty string), then change the expression:
map { $_ // "\0" } @array1
to
map { $_ || "\0" } @array1
map { $_ eq '' ? "\0" : $_ } @array1
30th January, 2013. Amended to address the problem noted by The Perlman, below.
Update 2: As with muba’s solution below, the above assumes that the array begins with a double blank.
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: Clubbing array elements together:
by Athanasius
in thread Clubbing array elements together:
by newbie1991
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |