use Data::Dumper; sub readFile{ open my $fh, "resource/datafile.txt" || die "Cannot open: $!"; @lines = <$fh>; $inblock = 0; my @block = [];shift @block; while($#lines >= 0){ my $single = shift @lines; print $single; if($single =~ /END DATA/){ $inblock = 0; push @allblocks,[@block]; @block = [];shift @block; } push @block,[split ' ',$single] if $inblock; $inblock = 1 if($single =~ /START DATA/); } } readFile; print Dumper(\@allblocks);