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]}; #### 123,foo,2,FOO 234,bar,2,BAR 345,zap,3,ZAP 456,bok,5,BOK #### ( "123|234|345|456", "foo|bar|zap|bok", "2|2|3|5", "FOO|BAR|ZAP|BOK")