使用perl将列转换为数组

使用perl将列转换为数组,perl,Perl,需要将列放入数组。当前具有下一个工作代码: use Modern::Perl; use Data::Dumper; my @aa; my @ab; my @ac; while(<DATA>) { chomp; my($x,$y,$z) = split /\s*:\s*/; push(@aa,$x); push(@ab,$y); push(@ac,$z); } say Dumper \@aa, \@ab

需要将列放入数组。当前具有下一个工作代码:

use Modern::Perl;
use Data::Dumper;

my @aa;
my @ab;
my @ac;

while(<DATA>) {
        chomp;
        my($x,$y,$z) = split /\s*:\s*/;
        push(@aa,$x);
        push(@ab,$y);
        push(@ac,$z);
}
say Dumper \@aa, \@ab, \@ac;

__DATA__
col1a : col1b : col1c
col2a : col2b : col2c
col3a : col3b : col3c
使用Modern::Perl;
使用数据::转储程序;
我的@aa;
我的@ab;
我的@ac;
while(){
咀嚼;
my($x,$y,$z)=拆分/\s*:\s*/;
推送(@aa$x);
推送(@ab,$y);
推力(@ac,$z);
}
说垃圾车\@aa、\@ab、\@ac;
__资料__
col1a:col1b:col1c
col2a:col2b:col2c
col3a:col3b:col3c
存在一些更紧凑、更优雅的方法来实现上述功能?

也许

while(<DATA>) {
        chomp;
        my @t = split /\s*:\s*/;
        push(@aa, shift @t);
        push(@ab, shift @t);
        push(@ac, shift @t);
}
say Dumper \@aa, \@ab, \@ac;
while(){
咀嚼;
my@t=split/\s*:\s*/;
推动(@aa,shift@t);
推动(@ab,移位@t);
推动(交流时,换档时,t时);
}
说垃圾车\@aa、\@ab、\@ac;
也可以使用2d数组

my @arr;
while(<DATA>) {
        chomp;
        my @t = split /\s*:\s*/;
        push @{$arr[$_]}, $t[$_] for 0 .. $#t;
}
say Dumper \@arr;
my@arr;
while(){
咀嚼;
my@t=split/\s*:\s*/;
推送{$arr[$\]},$t[$\]0..$\\t;
}
说倾卸者\@arr;

此外,还可以使用变量指向数组的末尾:

my $i = 0;
while (<DATA>) {
        chomp;
        ($aa[$i], $ab[$i], $ac[$i++]) = split /\s*:\s*/;
}
my$i=0;
而(){
咀嚼;
($aa[$i]、$ab[$i]、$ac[$i++])=split/\s*:\s*/;
}

您可能更喜欢使用
map

use strict;
use warnings;

my @cols = do {
  my @rows = map [ /[^:\s]+/g ], <DATA>;
  map [ map shift(@$_), @rows ], 0 .. $#{$rows[0]};
};

use Data::Dump;
dd \@cols;

__DATA__
col1a : col1b : col1c
col2a : col2b : col2c
col3a : col3b : col3c

2D阵列很棒。谢谢:)真遗憾。$。以1@mpapec:您可以访问它:
查找数据,0,1;$-1.while(){…}
。也许吧,但它引发了太多:)@jm666:我的标记在代码块前缺少一个空行,因此
使用严格的
使用警告
作为前面文本的一部分出现。啊,苏。。我被认为是使用pragmas的建议:)
[
  ["col1a", "col2a", "col3a"],
  ["col1b", "col2b", "col3b"],
  ["col1c", "col2c", "col3c"],
]