use strict; use warnings; my ($data, @records); open (FH, 'data.txt') || die; while () { $data .= $_; push @records, $1 while $data =~ s/(.*?)Separator \d+//s; } push @records, $data; use Data::Dumper; print Dumper(\@records);