open(my $fh, "<", $ARGV[0]) or die "\n$0 Error => $^E\n"; my $data = do { local $/; <$fh> }; close $fh; my @records = split /(?=\n\d+\s+)/, $data; # Now each item of @records has the lines you're looking for