$_ = " IF(A) anytext IF(B) anytext ENDIF IF(C) anytext ENDIF and on .... ENDIF "; @( = ('(',''); @) = (')',''); ($re=$_)=~s/((\bIF\b)|(\bENDIF\b)|.)/$([!$2]\Q$1\E$)[!$3]/gs; print join"\n\n",eval{/$re/},""; warn $@ if $@=~/unmatched/;