Perl并行迭代2个数组的方式

我用了
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的代码.它是独立的,可以保证与现有代码的兼容性.

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...