Pregunta

¿Cuál es la mejor manera de perfilar las expresiones regulares de Perl para determinar qué tan caras son?

¿Fue útil?

Solución

Perl viene con el módulo Benchmark , que puede tomar varios ejemplos de código y responder la pregunta de " ¿cuál es más rápido? " ;. Tengo un Perl Tip en Conceptos básicos de evaluación comparativa , y aunque eso no usa expresiones regulares per se, ofrece una introducción rápida y útil al tema, junto con más referencias.

brian d foy también tiene un excelente capítulo sobre evaluación comparativa en su Mastering Perl libro. Ha tenido la amabilidad de poner el capítulo en línea como borrador , que bien vale la pena leer. Realmente no puedo recomendarlo lo suficiente.

Paul

Otros consejos

Solo diciendo " usa el Benchmark & ??quot; Sin embargo, el módulo realmente no responde la pregunta. La evaluación comparativa de una expresión regular es diferente de la evaluación comparativa de un cálculo; necesita una gran cantidad de datos realistas para que pueda enfatizar la expresión regular como lo harían los datos reales. Si la mayoría de sus datos coincidirán, desearía una expresión regular que coincida rápidamente; Si la mayoría falla, desea una expresión regular que falle rápidamente. Podrían terminar siendo la misma expresión regular, pero tal vez no.

Mi forma preferida sería tener un gran conjunto de datos de entrada al RE y luego procesar esos datos N veces (por ejemplo, 100,000) para ver cuánto tiempo lleva.

Luego modifique el RE e intente nuevamente (guarde todos los RE antiguos como comentarios en caso de que necesite compararlos nuevamente en el futuro, ¿quién sabe qué maravillosas optimizaciones pueden aparecer en Perl 7?).

Bien puede haber herramientas que puedan analizar RE para darle rutas de ejecución para entradas específicas (como las herramientas de análisis en DBMS ') pero, dado que Perl es el lenguaje de los perezosos (un mandamiento transmitido por el propio Larry), yo no podría molestarse en encontrarlo :-).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top