use strict; use warnings; use Data::Dumper; my @matrix; while (){ chomp; if (m/^[A-Z]/){ push @matrix, [$_]; } else { push @{$matrix[-1]}, $_; } } print Dumper \@matrix; __DATA__ C -2.3242E-003 1.32423 0.34243E+002 ..etc... -3.23134 H more numbers