[RostovOnDon.pm] Perl 5.10

Владислав Жук Vladislav.Zhuk на rt.ru
Ср Сен 17 01:01:31 PDT 2008


Здравствуйте, Rostov-on-Don Perl Mongers!

Вы писали 17 сентября 2008 г., 11:41:13:

> Я вообще не использую сишный цикл for.
> Не зря его в Perl 6 переименовали в loop.

да Perl6 - это уже вообще другой язык...

А по поводу торможений при использовании спец.переменных нашел в
каком-то FAQ:

Почему использование $&, $` и $' замедляет программу?

(Отвечает Анно Зигель)

Если Perl видит, что где-либо в программе вам требуется одна из этих переменных, то он обеспечивает их для каждого поиска по шаблону. То есть, всякий раз копируется вся строка, частично - в $`, частично - в $&, частично - в $'. Это влечет серьезные неприятности, если вы имеете дело с большими строками или часто обращаетесь к шаблонам. Избегайте использования $&, $' и $`, если можете; если не можете, то, использовав единожды, не стесняйтесь использовать где угодно, потому что уже заплатили за это. В некоторых алгоритмах эти переменные действительно полезны. Начиная с версии 5.005, $& уже не такая затратная, как две остальные.

Начиная с Perl 5.6.1, специальные переменные @- и @+ могут заменить $`, $& и $'. Эти массивы содержат указатели на начало и конец каждого совпадения (подробности см. в perlvar) - дают ту же информацию, но без риска избыточного копирования строк.

В Perl 5.10 добавились ${^MATCH}, ${^PREMATCH} и ${^POSTMATCH} для тех же целей, но без общего ущерба для производительности. Perl задает эти переменные, только если регулярное выражение компилируется или выполняется с модификатором /p.

-- 
С уважением, Владислав




Подробная информация о списке рассылки RostovOnDon-pm