#!/usr/bin/perl use warnings; use strict; use Data::Dumper; use Scalar::Util qw(looks_like_number); my $data = []; while () { chomp; if (/^(\w{1,2})$/) { push(@$data, [$1]); } elsif (looks_like_number($_)) { push(@{$$data[-1]}, $_); } } print Dumper($data); __DATA__ C -2.3242E-003 1.32423 0.34243E+002 -3.23134 MD 0.34243E+002 -3.23134