while ( s{ ^ (.*?) (\s* \S+)_DEL (.*) $ } {$1$3\n$1$2$3}xmg ) {} #### sub del_selective { my $n = shift; if ( $n =~ m/(.*?)(\s*\S+)_DEL(.*)/s ) { my $s1 = $1.$3; my $s2 = $1.$2.$3; return ( del_selective( $s1 ), del_selective( $s2 ) ); } else { return ( $n ); } }