Как я могу профилировать регулярные выражения Perl?

StackOverflow https://stackoverflow.com/questions/415476

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

В освоении Perl

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

Пол

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top