Arrays 文件句柄数组上的Perl嵌套foreach循环

Arrays 文件句柄数组上的Perl嵌套foreach循环,arrays,perl,file-handling,Arrays,Perl,File Handling,我想打印出两个文件的第二列。最终我会将它打印到另一个文件中,但现在我只想将它输出到终端。我试图通过制作两个文件的数组来实现这一点。这是我的代码,但它不返回任何内容 unless (open COL1, '<'. $file1) {die "Couldn't open '$file1'\n";} unless (open COL2, '<'. $file2) {die "Couldn't open '$file2'\n";} while (!eof(COL1) and !eof(COL

我想打印出两个文件的第二列。最终我会将它打印到另一个文件中,但现在我只想将它输出到终端。我试图通过制作两个文件的数组来实现这一点。这是我的代码,但它不返回任何内容

unless (open COL1, '<'. $file1) {die "Couldn't open '$file1'\n";}
unless (open COL2, '<'. $file2) {die "Couldn't open '$file2'\n";}
while (!eof(COL1) and !eof(COL2)) {
    my @line = [<COL1>, <COL2>];
    #my $line2 = <COL2>;
    foreach my $line (@line) {
            foreach my $row ($line){
    my @column2 = split( /\t/, $row);
    print $column2[1];
}
  }
}
  close COL1;
    close COL2;


除非(打开COL1,将单个元素分配给数组
@line
,否则数组引用将指向两个文件的内容

my @line = [<COL1>, <COL2>];
my@line=[,];
你可能想要

my @line = (scalar <COL1>, scalar <COL2>);
my@line=(标量,标量);
i、 e.从第一个控制柄指定一行,从第二个控制柄指定一行

完整的程序看起来像

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

open my $in1, '<', shift or die $!;
open my $in2, '<', shift or die $!;

until (eof $in1 || eof $in2) {
    my @lines = (scalar <$in1>, scalar <$in2>);
    chomp @lines;
    my @columns;
    for my $line (@lines) {
        push @columns, (split /\t/, $line)[1];
    }
    say join "\t", @columns;
}
!/usr/bin/perl
使用警告;
严格使用;
使用特征qw{say};

打开我的$in1,'这有一个小问题。它将所有内容一起打印。与原始文件中的列格式不同。我尝试不使用chomp,将其打印为列,但对齐方式很奇怪。如何将其打印为两列。另请参见(以行并行方式处理文件)
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

open my $in1, '<', shift or die $!;
open my $in2, '<', shift or die $!;

until (eof $in1 || eof $in2) {
    my @lines = (scalar <$in1>, scalar <$in2>);
    chomp @lines;
    my @columns;
    for my $line (@lines) {
        push @columns, (split /\t/, $line)[1];
    }
    say join "\t", @columns;
}
chomp( my @lines = (scalar <$in1>, scalar <$in2>) );
say join "\t", map +(split /\t/, $_)[1], @lines;