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); #### $VAR1 = [ [ '1', '2', '3' ], [ '4', '5' ], [ '6', '7', '8', '9' ], [ '10' ] ]; #### @array = qw( 1 2 # 3 4 5 # 6 7 8 9 # 10); @array = grep { $_ ne '#' } @array; print "@array\n"; #### 1 2 3 4 5 6 7 8 9 10