суббота, 10 июля 2010 г.

ужасный perl

Дичайше радуют меня книжки про программирование на perl - практически в любой можно узнать много нового, убедиться что perl ты совершенно не знаешь и вообще всю жизнь использовал неправильно что немедленно повергает в пучину тоски и уныния

Вот давеча читаю я например второе издание Effective Perl Programming исхожу пеной от бессилия и сознания собственной тупости и невежества и в item 33 вижу следующий совет - если вы в своей гениальной программе хотя бы один только раз используете переменные $`, $& или $', то вообще любое регулярное выражение в вашей программе будет заполнять их при выполнении. Естественно не поверив, бросился немедленно в пятитысячный раз перечитывать perldoc perlre и таки да:
 WARNING: Once Perl sees that you need one of $&, $`, or $' anywhere in the program, it has to provide them for every pattern match. This may substantially slow your program.
Все еще не веря глазам своим сделал grep по стандартным перловым пакетам на предмет использования этих чорных магических переменных - практически не используются, разве что в Pod::Html.pm и Tk::Reindex

Заодно нашел аналогичное зловещее предупреждение в B::Lint.pm:
This option warns whenever one of the regexp variables $', $& or $' is used. Any occurrence of any of these variables in your program can slow your whole program down
Надо будет прошерстить на следующей неделе всю невероятную кучу своих скриптов и сделать с этим уже чего-нть.

3 комментария:

  1. Интересно было бы после твоего упражнения понять насколько скрипты стали быстрее.

    ОтветитьУдалить
  2. у меня есть специальный наборчик тестовых данных размером 19Gb - могу на нем прогнать. В текущей версии он жуется 2621 секунд примерно
    а вообще - вы скци ?

    ОтветитьУдалить
  3. если кому интересно - после выкидывания всяких магических переменных скрипт на одном и том же наборе данных отработал за 1593 секунды против 2102 в старой версии
    мой невооруженный взгляд видит ускорение на четверть

    ОтветитьУдалить