交替获取两个数组值

时间:2016-07-18 11:09:46

标签: perl

我将两个数组内容写入文件:

@a1 = ('ABC', 'DEF', 'GHI');
@b1 = (1234, 6789, 7635);

open my $fh, ">", "log.txt" or die "Cannot open log.txt: $!";

foreach ( @a1, @a2 ) {
    print $fh "$_\n";
} 

close $fh; 

输出:

ABC
DEF
GHI
1234
6789
7635

我想以下列方式将其写入日志文件:

ABC 1234
DEF 6789
GHI 7635

我不确定如何实现它。

2 个答案:

答案 0 :(得分:4)

您可以使用List::MoreUtils

中的pairwise运算符

喜欢这样

use strict;
use warnings 'all';

use List::MoreUtils 'pairwise';

my @a1 = qw/ ABC  DEF  GHI  /;
my @b1 = qw/ 1234 6789 7635 /;

my @pairs = pairwise { [ $a, $b ] } @a1, @b1;

print "@$_\n" for @pairs;

输出

ABC 1234
DEF 6789
GHI 7635

如果这是所有你想对这些对,那么你可以完全避免中间列表并写

pairwise { print "$a $b\n" } @a1, @b1;

具有相同的结果

请注意,如果一个数组比另一个数组短,那么在较短数组结束后,$a$b将设置为undef。你必须适当地处理

答案 1 :(得分:1)

如果@a1@b1的长度始终相同:

use strict;
use warnings;

my @a1 = qw( ABC DEF GHI );
my @b1 = qw( 1234 6789 7635 );

open my $fh, ">", "log.txt" or die "Cannot open log.txt: $!"; 

for my $i (0..$#a1){
    print $fh "$a1[$i] $b1[$i]\n";
}

或者:

use feature qw/ say /;

say $fh join(' ', $a1[$_], $b1[$_]) for 0 .. $#a1;