OK, my prototype wasn't totally correct.
Here an implementation allowing to combine multiple cross(), like in the OP
use strict;
use warnings;
use Data::Dump qw/pp dd/;
use 5.12.0;
# https://perlmonks.org/?node_id=11121968
sub cross(&\@@) {
my ( $code, $a_a, @b ) = @_;
#warn pp $code, $a_a,\@b;
map {
$a = $_;
map { $b=$_; &$code } @b;
} @$a_a;
}
my @a = 1..3;
my @b = 4..6;
my @c = 7..9;
pp
cross { $a.$b } @a,
cross { $a.$b } @b,@c;
(
147,
148,
149,
157,
158,
159,
167,
168,
169,
247,
248,
249,
257,
258,
259,
267,
268,
269,
347,
348,
349,
357,
358,
359,
367,
368,
369,
)
| [reply] [d/l] [select] |
use strict;
use warnings;
use List::MapMulti;
use Data::Dump 'pp';
my @a = 1..3;
my @b = 4..6;
my @c = 7..9;
pp mapm { $_[0] . $_[1] . $_[2] } \@a, \@b, \@c;
It can also be used as an iterator:
use strict;
use warnings;
use List::MapMulti 'iterator_multi';
use feature 'say';
my @a = 1..3;
my @b = 4..6;
my @c = 7..9;
my $iter = iterator_multi( \@a, \@b, \@c );
while ( my ( $a, $b, $c ) = $iter->() ) {
say $a, $b, $c;
}
| [reply] [d/l] [select] |
Thank you for the replies, and I'm sorry my query wasn't clear enough. I am not looking for additional solutions. I am looking for a way to choose between two of the solutions already presented.
Specifically, in an application that uses a nested map only once, is it better to use a single temporary variable as in the example quoted in DrHyde's post, or is it better to load another CPAN module that only gets used the one time, simply to avoid this temporary variable? And is "better" different for the Perl interpreter than it is for the human who has to understand/maintain the code?
If you want to offer another approach and explain why it's better than both those options, that's also useful.
But what I'm interested in is the decision process, not new coding techniques. Thank you, and I hope that clarifies.
| [reply] [d/l] |