while (1) { $tmpl =~ /\G(...)/gcs && do { if ($1 eq "w") { croak "w is bad"; } else { $result .= process_template($1); } } || $tmpl =~ /\G(...)/gcs && do { ...do.something.else... } || last; }