while (1) { $foo .= $foo =~ /(bar(baz(buz)?)?)/; print "bar found\n" if defined $1; print "baz found\n" if defined $2; print "buz found\n" if defined $3; last if defined $3; }