local $/ = "\nend\n"; while ( my $data = ) { $data =~ s/^.*start/start/is; print $data; print '=' x 10, "\n"; } __DATA__ start start start go one end start start start go two end #### start go one end ========== start go two end ========== #### my $data = ''; while ( my $line = ) { $data .= $line; if ( $line =~ /^end$/i ) { $data =~ s/^.*start/start/is; print $data; print '=' x 10, "\n"; $data = ''; } }