use strict; use warnings; use Data::Dumper; my @broken_up; my @array = qw( 1 2 3 # 4 5 # 6 7 8 9 # 10); my $position = 0; $broken_up[0] = []; foreach my $item (@array) { if ($item eq '#') { $position++; $broken_up[$position] = []; } else { push @{ $broken_up[$position] }, $item; } } print Dumper(\@broken_up);