>Потому что ты сделал так, что получил обратное поведение.
>
>$str=~/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/
>
>вот этот регексп оптимизатор компилирует заранее и больше не трогает, потому что
>в нём все данные - статические. он быстрее
>
>а вот в этот
>$str=~/$patt/
>
>ты засунул переменную. откуда оптимизатор знать, меняется она или нет? Он вынужден
>каждый цикл перекомпилировать регулярное выражение.
>
>Где у тебя ключ /o который ты указал в теме сообщения?
>qr - это не предкомипиляция.
>
>perldoc perlre
Вы так уверено об этом говорили, что я чуть не поверил.. спас ГУГЛ:________________________________________________________________________________________
6.4.6.3. Создание регулярного выражения
Синтаксис: qr/string/modifiers
Эта конструкция создает регулярное выражение с текстом string и модификаторами modifiers и компилирует его. Если ограничителями являются символы '', то интерполяция строки string не производится. В остальных случаях происходит интерполяция образца и если он содержит переменные, то при каждом сопоставлении производится его компиляция. Чтобы избежать этого, используйте модификатор o (разумеется, если вы уверены, что значения переменных, входящих в образец, остаются неизменными).
Однажды созданное регулярное выражение может употребляться как самостоятельно, так и в качестве фрагмента других регулярных выражений. Примеры:
$re = qr/\d+/;
$string =~ /\s*${re}\s*/; # включение в другое регулярное выражение
$string =~ $re; # самостоятельное использование
$string =~ /$re/; # то же самое
$re = qr/$header/is;
s/$re/text/; # то же, что s/$header/text/is
________________________________________________________________________________________