Perl: List Comprehension

By Xah Lee. Date: . Last updated: .

Perl does not have the “list comprehension” as it is. However, in general, functional programing's brevity is more easily achieved in Perl than Python.

Here's a example of generating a list of i*2 for i from 1 to 5:

# -*- coding: utf-8 -*-
# perl

use Data::Dumper;

@myList = map {$_ * 2} (1..5);

print Dumper(\@myList);         # [ 2, 4, 6, 8, 10 ]

Here's a example of generating a list of pairs [i*2, i*3].

# -*- coding: utf-8 -*-
# perl

use Data::Dumper;

@myList = map {[$_ * 2, $_ * 3]} (1..5);

print Dumper(\@myList); # [ [ 2, 3 ], [ 4, 6 ], [ 6, 9 ], [ 8, 12 ], [ 10, 15 ] ]

Here's a example of generating a nested list involving 2 looping variables that's normally done with “list comprehension”. In Perl, it's just done with normal nested loops.

# -*- coding: utf-8 -*-
# perl

@myList=();
for $i (1..5) {
  for $j (1..3) {
    push @myList, [$i,$j];
  }
}

use Data::Dumper; $Data::Dumper::Indent=0;
print Dumper(\@myList);

__END__

[
 [1,1],[1,2],[1,3],
 [2,1],[2,2],[2,3],
 [3,1],[3,2],[3,3],
 [4,1],[4,2],[4,3],
 [5,1],[5,2],[5,3]
]