Как я могу профилировать регулярные выражения Perl? - PullRequest
8 голосов
/ 06 января 2009

Какой лучший способ профилировать регулярные выражения Perl, чтобы определить, насколько они дороги?

Ответы [ 3 ]

13 голосов
/ 06 января 2009

Perl поставляется с модулем Benchmark , который может взять несколько примеров кода и ответить на вопрос «какой из них быстрее?». У меня есть Perl Tip на Основы бенчмаркинга , и хотя он не использует регулярные выражения как таковые, он дает быстрое и полезное введение в тему вместе с дальнейшими ссылками .

Брайан Д. Фой также имеет превосходную главу по бенчмаркингу в своей книге Mastering Perl . Он был настолько любезен, что поместил главу в режиме онлайн как черновик , который стоит прочитать. Я действительно не могу рекомендовать это достаточно.

Пол

3 голосов
/ 06 января 2009

Просто сказать, что модуль «использовать тест» не дает реального ответа на вопрос. Сравнительный анализ регулярных выражений отличается от сравнительного анализа вычислений; вам нужно большое количество реалистичных данных, чтобы вы могли использовать регулярные выражения так, как это делают реальные данные. Если большая часть ваших данных будет соответствовать, вы захотите регулярное выражение, которое будет соответствовать быстро; если большинство из них потерпит неудачу, вы хотите регулярное выражение, которое быстро терпит неудачу. Они могут оказаться одним и тем же регулярным выражением, но, возможно, нет.

0 голосов
/ 06 января 2009

Мой предпочтительный способ заключается в том, чтобы иметь большой набор входных данных для RE, а затем обрабатывать эти данные N раз (например, 100 000), чтобы увидеть, сколько времени это займет.

Затем настройте RE и попробуйте снова (оставьте все старые RE в качестве комментариев на случай, если вам понадобится снова их сравнить в будущем, кто знает, какие удивительные оптимизации могут появиться в Perl 7?).

Вполне могут быть инструменты, которые могут анализировать RE, чтобы дать вам пути выполнения для конкретных входных данных (например, инструменты анализа в СУБД), но, поскольку Perl - это язык ленивых (команда, переданная самим Ларри), я не потрудившись найти его: -).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...