my $csv = Text::CSV_XS->new ({ binary => 1 }); open my $dta, "<", "data.csv" or die "data: $!\n"; my @rows; while (my $row = $csv->getline ($dta)) { push @rows, $row; } $csv->eof or $csv->error_diag; close $dta; # pivot my @data = map { my $col = $_; join "|", map { $_->[$col] } @rows } 0..$#{$rows[0]};