Для полноты и чтобы Том был счастлив, вот чистая реализация на Perl pairwise
, которую вы можете использовать:
use B ();
use List::Util 'min';
sub pairwise (&\@\@) {
my ($code, $xs, $ys) = @_;
my ($a, $b) = do {
my $caller = B::svref_2object($code)->STASH->NAME;
no strict 'refs';
map \*{$caller.'::'.$_} => qw(a b);
};
map {
local *$a = \$$xs[$_];
local *$b = \$$ys[$_];
$code->()
} 0 .. min $#$xs, $#$ys
}
Поскольку это немного связано, вероятно, проще использовать map
, как показывает Даворг.