use warnings; use strict; use Data::Dumper; my @rows; while () { my @row = grep { m/[012]/ } split ' '; push @rows, \@row if (scalar @row == 5); } print 'Results: ', Dumper(\@rows); __DATA__ 2 2 0 1 0 2 2 0 2 1 0 2 1 1 0 0 1 1 1 0 2 2 0 0 0 2 9 0 2 1 0 2 0 1 0 2 2 0 9 0