use strict; use Data::Dumper; my @outer = (); my @inner = (); my $n = 0; while () { chomp; push @inner, { DATA => $_ }; if ($n == 1) { push @outer, { 'INNER' => @inner }; @inner = (); $n = 0; } else { $n++; } } print Dumper(\@outer); __DATA__ data01 data02 data11 data12