Sie können dieses einfachere Umschreiben der Funktion each_arrayref
des Moduls verwenden. each_array
ist ein überflüssiger Wrapper um diese Funktion, der Prototypen verwendet, um Referenzen auf Arrays zu nehmen, die als Parameter übergeben werden.
Seine Funktionalität ist identisch mit der Modulversion, mit der Ausnahme, dass es keine Überprüfung der Parameter, die es empfängt, und der zurückgegebene Iterator überprüft nicht, ob es keine Parameter oder 'index'
hat.
use strict;
use warnings;
sub each_array {
my @copy = @_;
my $i;
my $max;
for (map scalar @$_, @copy) {
$max = $_ unless defined $max and $max > $_;
}
sub {
return $i if @_ and shift eq 'index';
my $new_i = defined $i ? $i + 1 : 0;
return if $new_i >= $max;
$i = $new_i;
return map $_->[$i], @copy;
}
}
my @array1 = qw/ A B C /;
my @array2 = qw/ D E F G /;
my $iter = each_array(\@array1, \@array2);
while (my @values = $iter->()) {
printf "%d: %s\n", $iter->('index'), join ', ', map $_ // 'undef', @values;
}
Ausgang
0: A, D
1: B, E
2: C, F
3: undef, G
Man könnte sich natürlich für each_arrayref
vom List::MoreUtils
Modul den Code einfach nehmen. Es ist eigenständig und garantiert die Kompatibilität mit Ihrem bestehenden Code.
Und wenn Sie 'List :: MoreUtils 'nicht benötigen, können Sie einfach nur [Teile kopieren] (http://cpansearch.perl.org/src/RURBAN/List-MoreUtils-0.33 _007/lib/List/MoreUtils.pm) in Ihre Anwendung. – mob
Wow danke Mob, Perl wächst auf mich: D – subramanian
... wenn dein Code mit einer kompatiblen Lizenz vertrieben wird. – ikegami