use strict; use warnings; use Data::Dumper; my @aoa1; my @aoa2; my $row=0; while (){ chomp; push @{$aoa1[$row]}, split /\s+/; $row++; push @aoa2, [ split /\s+/ ]; } print Dumper \@aoa1; print Dumper \@aoa2; __DATA__ A1 A2 A3 B1 B2 B3 C1 C2 C3