Имеем строку, надо узнать входят ли в нее оба шаблона, порядок вхождения не важен.
то есть заменить : if ($str =~/$pattern1/g && $str =~/$pattern2/g)
на что-то подобное: if ($str =~/$pattern1 && $pattern2/g)
mr_creo: возможен частный случай, когда вхождения не могут повторяться. Тогда просто регулярка с уточнением количества вхождений матчит, как надо. Независимо от того, сколько вхождений и в каком порядке имеются.
mr_creo: если у вас могут быть вхождения "мама", "мыла", "муху", но ни одно из них не может повторяться дважды, то регулярка (мама|мыла|муху){3} матчит их совместное упоминание в тексте в любом порядке.
Adamos: вы хотели сказать низший приоритет, и да скобки тут только для выдирания значений нужны, а если просто соответствие проверить то и можно убрать
mr_creo: я сказал то, что хотел сказать. Скобки у меня объединяют значение, которое должно повториться трижды. Иначе, если я правильно знаю приоритеты операций, фигурные скобки будут отнесены только к последнему символу перед ними.
Если вы про скобки внутри скобок - да, они могут понадобиться только для получения значений. Впрочем, мои скобки тоже вернут значение, так что внутренние и здесь могут быть бесполезны.