#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @records; { local $/ = '$$$$' . "\n"; while (my $record = ) { my ($stripped) = split /\nM END\n/, $record, 2; push @records, "$stripped\nM END\n$/"; } } print Dumper \@records; __DATA__ -OECHEM 658567- 1 2 0000 V2000 4 \t 5 8.7 7.655 3 2 \t 55 6 4 5 M END > 665765765 > db1 $$$$ -OECHEM 35343- 3 6 0000 V2000 1 \t 7 6 4.6 9 2 \t 45 0 3 5 M END > 3546789 > db1 $$$$