Home
FREE Newsletter
Perl How To
Perl Books
Perl Basics
Perl Editors
Perl Modules
Perl Database
Net Programming
Sitemap
About Me
Contact Me
Blog
 

How to use the Perl join function with an AOA (array of arrays)



NEW!!!

Check my new resource:    Perl How To Tutorial eBooks



Perl join function is used to concatenate the elements of an array or a list into a string, using a separator given by a scalar variable value. For a simple array, I remind you the usual syntax form:

$string = join EXPR, LIST;

where:

  • EXPR may be any string and it represents a separator for the elements of the list or array
  • LIST represents a list or array whose elements will be merged into a string
If you have an array of arrays (@AOA), you can use some additional syntax forms for the join function.

I’ll illustrate this by giving you a few examples.

Join into a string the elements of a particular sub-array

To join into a string the elements of a sub-array, you can use the following syntax form:

$string = join EXPR, @ { $AOA [ $index ] };

where $index is the index or subscript of the given sub-array.

$AOA[$index] is a reference to a sub-array, so you need to dereference it by putting a @ sign in front of the reference; to avoid any ambiguity or operators precedence rule, the reference is enclosed by braces.

Here is an example:

#!/usr/local/bin/perl

use strict;
use warnings;

my @AOA = ( 
  [ 'a1', 'b1', 1 ],
  [ 'a2', 'b2', 2 ],
  [ 'a3', 'b3', 3 ],
  [ 'a4', 'b4', 4 ],
); 

my $index = 1;    # the second sub-array

my $str = join ',', @ { $AOA [ $index ]} ;

print "$str\n"; 
# it prints: a2,b2,2

The [] is the array constructor and returns a reference to the list enclosed in the square brackets. To join the elements of the subarray, the comma character was used.

Join the elements of a particular column of a matrix into a string

If you have a matrix represented as an array of arrays, than you can extract the elements of a particular column and join them into a string, by using map and join:

$str = join EXPR, map $_->[$index], @AOA;

where $index is the index of the matrix column.

@AOA contains array references, the map function will extract for each reference assigned to $_ the corresponding element of the $index column; for dereferencing the -> operator was used because is more easier to read (if you prefer you can use also the notation $$_[$index]). The join function will join the elements of the list returned by map into a string, separating them by EXPR.

Here is an example:

#!/usr/local/bin/perl

use strict;
use warnings;

my @AOA = ( 
  [ 'a1', 'b1', 1 ],
  [ 'a2', 'b2', 2 ],
  [ 'a3', 'b3', 3 ],
  [ 'a4', 'b4', 4 ],
); 

my $index = 1;   # the second column of the matrix

$str = join ',', map $_->[$index], @AOA;

print "$str\n"; 
# it prints: b1,b2,b3,b4


As you can see from the output, the $str variable contains the elements of the matrix second column, separated by comma.

Turn each subarray into a string and get an array with all these strings

If you have an array of arrays, you can use foreach to iterate through its array references and for each sub-array you can join its elements into a string using an EXPR separator and next append this string into an array using the push function.

You can use either an explicit foreach loop with a block or the short form of foreach as a modifier.

See below the syntax forms in both cases:

foreach my $item (@AOA) {
  push @array, join EXPR, @{$item};
}

# or

push @array, join EXPR, @$_ foreach (@AOA);


$item is a reference to an array and because the second argument of the join function is a list or an array, you need to dereference it by using the @{$item} notation.

To be more explicit, let’s look at an example:

#!/usr/local/bin/perl

use strict;
use warnings;

my @AOA = ( 
  [ 'a1', 'b1', 1 ],
  [ 'a2', 'b2', 2 ],
  [ 'a3', 'b3', 3 ],
  [ 'a4', 'b4', 4 ],
); 

my @array = ();
push @array, join ',', @$_ foreach (@AOA);

print "$_\n" foreach @array;


I used the same @AOA as in the examples presented above. I used the foreach loop to print the elements of the resulting array, each element on a new line.

The output is as follows:

a1,b1,1
a2,b2,2
a3,b3,3
a4,b4,4






NEW!!!

Do you want more information about the basic Perl topics?

Check my new "Perl How To" Tutorial eBooks page where I'll answer the most frequent questions regarding some topics :


Perl How To Tutorial eBooks




Would you like to create your own website like this one?
Hit the Alarm Clock!

Site Build It!