$/ = ""; my $last_prefix = my $last_target = ''; while (<>) { if ( /^abc/ ) { print $last_prefix.$last_target if ( $last_target ); $last_prefix = $_; $last_target = ''; } elsif ( /^def/ ) { $last_target = $_; } elsif ( $last_target ) { $last_target .= $_; } elsif ( $last_prefix ) { $last_prefix .= $_; } }