2009-12-11 21 views
6

¿Qué quiere decir la gente cuando dice "Perl es muy bueno en el análisis"?¿Qué quiere decir la gente cuando dice "Perl es muy bueno en el análisis"?

¿Cómo es Perl mejor o más poderoso que otros lenguajes de scripting como Python o Ruby?

+2

Para mí, sugiere que no saben mucho sobre el análisis sintáctico y probablemente conozcan menos sobre lenguajes como Python y Ruby ... y mucho menos sobre herramientas como lex/flex y yacc/bison. Sugiere que están obsesionados por expresiones regulares y la extracción de patrones de formatos de datos simples (que combinan con "análisis sintáctico"). Finalmente, sugiere encarecidamente que esas personas, cuando se enfrenten a un problema de análisis real, creen un código medio fragmentado y frágil que pase sus casos de prueba simplemente inventados mientras causa dolor a quienes dependen de ese código para el trabajo real. –

+0

El código medio fragmentado y añejo es * perfecto * para el tipo de tareas tediosas e irrepetibles que uno razonablemente podría esperar abordar con perl en la mano ... Escribir una gramática BNF para analizar archivos de registro simplemente no suena como una buen uso del tiempo. – Shog9

+2

Hay muchas cosas que no tienen una gramática, y Perl te brinda muchas herramientas para lidiar con eso. Regexes no son lo único en la caja de herramientas de Perl. –

Respuesta

18

quieren decir que Perl fue diseñado originalmente para archivos de texto de procesamiento y tiene muchas características que hacen que sea fácil:

  • Perl tiene muchas funciones para el procesamiento de cadenas: substr, index, chomp, length, grep, sort, reverse, lc, ucfirst, ...
  • Perl convierte automáticamente entre números y cadenas dependiendo de cómo se usa un valor. (por ejemplo, puede leer la cadena de caracteres '100' de un archivo y agregarle uno sin necesidad de hacer una conversión de cadena a enteros primero)
  • Perl maneja automáticamente la conversión hacia y desde la codificación de la plataforma (por ejemplo, CRLF en Windows) y una nueva línea lógica ("\ n") dentro de su programa.
  • Las expresiones regulares están integradas en la sintaxis en lugar de ser una biblioteca separada.
  • Las expresiones regulares de Perl son el "estándar de oro" para la potencia y la funcionalidad.
  • Perl tiene compatibilidad total con Unicode.

Python y Ruby también tienen buenas instalaciones para el procesamiento de texto. (Ruby, en particular, se inspiró mucho en Perl, al igual que Perl ha tomado descaradamente de muchos otros idiomas.) No tiene mucho sentido preguntar qué es mejor. Usa lo que quieras

+7

Aunque algunas personas de $ _, creo que pertenece a esa lista. La idea de que tenga un "tema actual" o algo en lo que esté trabajando y aplicarle varios pasos es muy bueno. –

+1

No diría que Perl maneje automáticamente los finales de línea. Creo que estás confundiendo eso con escribir en un archivo de texto en Windows. Leer los datos que regresan no hace nada especial a menos que le digas a Perl qué hacer. –

+0

@brian: La conversión entre la secuencia de nueva línea de la plataforma y una "\ n" lógica ocurre tanto en lectura como en escritura (ignorando 'binmode', por supuesto). Sé que eres muy consciente de esto, así que encuentro tu comentario confuso. Supongo que podría haber dicho que "Perl te permite pensar en términos de nuevas líneas lógicas en lugar de preocuparte por la secuencia que usa tu sistema operativo" sin mencionar cómo lo hace. –

1

Perl es muy bueno en el análisis de texto, en comparación con C/C++/Java.

+8

Igor probablemente debería ampliar su respuesta para notar que, cuando apareció Perl, el procesamiento de texto no era una tarea trivial. 20 años después, la gente no aprecia ese dolor ahora que todo tiene PCRE, etc. –

4

Perl es bueno para ETL o movimientos de procesamiento por lotes también. Es una cantidad mínima de código para recoger el archivo; empújelo a través de split para obtener un map, realice algunas acciones comerciales lógicas en el registro y vuelva a escribirlo en el disco.

Supongo que se trata más de procesamiento de datos que de análisis de datos, pero el procesamiento de datos es un análisis masivo de datos.

11

No tome una declaración de las fortalezas de Perl como una declaración de los fallos de otro idioma. Perl es bueno para el procesamiento de texto, pero eso no significa que Ruby o Python apestan.

Cuando la gente habla de que Perl es "bueno para analizar", están haciendo eco principalmente de la historia de Perl; fue inventado el día en que el procesamiento de textos pesados ​​no era fácil. Intenta hacer algo de eso en C o C++ (¡Java aún no se había inventado!). En el pasado, Larry intentaba hacer su trabajo con sed y awk, pero al encontrarse con sus limitaciones. Hizo una herramienta que hizo el texto aún más fácil de trabajar.

Perl sigue siendo muy bueno para las tareas de manipulación de texto, pero ahora también lo son muchos otros idiomas.

0

Probablemente sea porque la gente está acostumbrada a lo que estaba diseñado, como se describe en perl documentation, por lo que es habitual que muchas personas asocien el análisis de archivos de texto con Perl. Para no excluir a Ruby o Python, es simplemente más de un nombre familiar en mi humilde opinión.

Perl es un lenguaje optimizado para escanear archivos de texto arbitrarios, extraer información de esos archivos de texto e imprimir informes basados ​​en esa información. También es un buen lenguaje para muchas tareas de administración de sistemas. El lenguaje está destinado a ser práctico (fácil de usar, eficiente, completo) en lugar de hermoso (pequeño, elegante, mínimo).

Cuestiones relacionadas