use warnings; use strict; use Data::Dumper; { local $/ = "\nXXX\n"; while (my $record = ) { # remove the separator from the record $record =~ s{\Q$/\E$}{}; print Dumper $record; # process the record here } }; __DATA__ This is a test. XXX This is a multiline test. XXX #### $VAR1 = 'This is a test.'; $VAR1 = 'This is a multiline test.';