Возможен вариант с while, что-то вроде: $m(1) ^while($m eq "1"){ ^if(^new.match[\[(quote?)\](.+?)\[/\1\]][gi]){$new[^new.match[\[(quote?)\](.+?)\[/\1\]][gi]{<blockquote>$match.2</blockquote>}]}{$m(0)} } А можно ли обойтись только match, без всяких внешних циклов?