Bạn có thể muốn sử dụng hàm viết lại đơn giản này của hàm each_arrayref
của mô-đun. each_array
là một trình bao bọc thừa xung quanh hàm này sử dụng các nguyên mẫu để tham chiếu đến các mảng được truyền dưới dạng tham số.
Chức năng của nó giống hệt với phiên bản mô-đun, ngoại trừ việc nó không kiểm tra các tham số nhận được, và trình trả về không kiểm tra xem nó có tham số hoặc 'index'
hay không.
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;
}
đầu ra
0: A, D
1: B, E
2: C, F
3: undef, G
Bạn có thể, tất nhiên, chỉ cần lấy mã cho each_arrayref
từ các module List::MoreUtils
. Nó là khép kín và sẽ đảm bảo khả năng tương thích với mã hiện tại của bạn.
Và nếu bạn không muốn yêu cầu 'Danh sách :: MoreUtils', bạn vẫn có thể [sao chép các phần bạn thích] (http://cpansearch.perl.org/src/RURBAN/List-MoreUtils-0.33 _007/lib/List/MoreUtils.pm) vào ứng dụng của bạn. – mob
Cảm ơn đám đông, Perl đang phát triển với tôi: D – subramanian
... nếu mã của bạn được phân phối bằng giấy phép tương thích. – ikegami