Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 0975a120

Von Sven Schöling vor etwa 16 Jahren hinzugefügt

  • ID 0975a120536e57a0f563e04b33f33f14ce8ba89e
  • Vorgänger 084d1390
  • Nachfolger e43cccf4

Kreuzprodukt aus zwei Arrays in List::MoreUtils Stil.

usage:

@crossed_array = cross { func($a, $b) } @array1, @array2;

Unterschiede anzeigen:

bin/mozilla/common.pl
$lxdebug->leave_sub();
}
sub cross(&\@\@) {
my $op = shift;
use vars qw/@A @B/;
local (*A, *B) = @_; # syms for caller's input arrays
# Localise $a, $b
my ($caller_a, $caller_b) = do
{
my $pkg = caller();
no strict 'refs';
\*{$pkg.'::a'}, \*{$pkg.'::b'};
};
my $limit = $#A > $#B? $#A : $#B; # loop iteration limit
local(*$caller_a, *$caller_b);
# This map expression is also the return value.
map { my $b_index = $_;
map { my $a_index = $_;
# assign to $a, $b as refs to caller's array elements
(*$caller_a, *$caller_b) = \($A[$a_index], $B[$b_index]);
$op->(); # perform the transformation
} 0 .. $#A;
} 0 .. $#B;
}
1;

Auch abrufbar als: Unified diff