Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Clubbing array elements together:

by Athanasius (Monsignor)
on Jan 29, 2013 at 11:40 UTC ( #1015866=note: print w/ replies, xml ) Need Help??


in reply to Clubbing array elements together:

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,


Comment on Re: Clubbing array elements together:
Select or Download Code
Re^2: Clubbing array elements together:
by The Perlman (Beadle) on Jan 29, 2013 at 19:10 UTC
    Nice! But map { $_ || "\0" } @array1 will fail with anything false like "0".
    - Ron
Re^2: Clubbing array elements together:
by Rahul6990 (Beadle) on Jan 30, 2013 at 07:07 UTC

    Hi, Can you me explain me what is the below code doing:

    dd @array1; dd @array2;

      To print out the contents of an array, you can use join: print join(', ', @array1), "\n";. However, for more complicated (i.e. nested) data structures, you need to write loops to iterate over the data to be printed. Fortunately, Perl has a module Data::Dumper which handles all of this for you:

      use Data::Dumper; ... print Dumper(\@array1), "\n";

      This is a core module, so it comes as part of your Perl installation. And there are other modules available on CPAN which do essentially the same job, but with some differences. My current favourite is Data::Dump, which can be used like this:

      use Data::Dump; ... dd @array1;

      See Data::Dump.

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1015866]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2014-10-02 04:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    What is your favourite meta-syntactic variable name?














    Results (48 votes), past polls