我用了
Use List::MoreUtils qw(each_array); my $it = each_array( @input_dump_arr,@created_dump_arr); while ( my ($first,$second) = $it->()) { }
这是否适用于默认的perl配置?
一个更广泛的问题是有编写“可移植”perl脚本的指导原则吗?我是Perl的新手,只是试图弄清楚cpan是否实际上类似于增强库的c.
解决方法
您可能希望使用模块的each_arrayref函数更简单的重写. each_array是这个函数的多余包装器,它使用原型来引用作为参数传递的数组.
它的功能与模块版本相同,只是它不检查它接收的参数,并且返回的迭代器不检查它没有参数或’index’.
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; }
产量
0: A,D 1: B,E 2: C,F 3: undef,G
当然,您可以简单地从List :: MoreUtils模块中获取each_arrayref的代码.它是独立的,可以保证与现有代码的兼容性.