8 de Noviembre, 2006

Cuidado: he aprendido Perl y estoy dispuesto a usarlo

Aunque estoy en el departamento de calidad, y conste que no voy a hablar de mi trabajo ;), en las últimas semanas he estado programando intensivamente en Perl.

PERL!
La mascota ahora me gusta :D

¿Cómo se llega a esta situación? Bueno, hay gente en el proyecto que ya se maneja con un lenguaje, existen módulos específicos que ya son funcionales, y en realidad porque me daba un poco igual: no me veía con argumentos como para proponer el uso de Ruby o incluso Python, porque no soy experto programando en ninguno de los tres.

En cualquier caso hay algunas pinceladas que puedo comentar:

  • No es obligatorio escribir ofuscado: aunque es perfectamente posible. Creo que casi siempre que había visto código en Perl, se trataba de código mejorable. Con un poco de cuidado el código es hasta mantenible ;).
  • Es realmente fácil hacer y usar módulos: que no es lo mismo que modularizar, cosa que depende más del programador (sea Perl, C o Java). Ayuda bastante a ordenar las cosas y evitar código espagueti que se alarga y alarga por abuso de copia-pega.
  • Los amigos $_ y @_: una vez superado el rechazo inicial a perder tiempo con la semiótica del lenguaje, resultan muy convenientes y agilizan mucho el código (ejemplo: foreach(@array) { print "$_"; }). El único problema es el aspecto que tienen cuando no sabes Perl, pero no lo veo un inconveniente terrible si tenemos en cuenta que para programar en un lenguaje hay que conocer dicho lenguaje (pese a que no es lo habitual :P).
  • Sintaxis y sensaciones encontradas: las expresiones regulares están tan integradas en el lenguaje que puedes dejar caer un s/^\s+//; s/\s+$//; y tienes resueltos tus problemas, y a la vez puedes ser tan explícito como un die("error fatal") unless $error ne 0;. Las estructuras de control de flujo admiten muchas posibilidades, y sin darme cuenta he empezado a usar de forma natural construcciones que no existen en otros lenguajes, que yo conozca al menos, probablemente por su proximidad al lenguaje natural (aunque sea el inglés).
  • Los vectores, listas y hashes no son intuitivos:: cada cual se referencia y accede de una forma (vector: @v y $v[0]=1, lista: como el vector pero de mentirijilla -no me pidáis que lo explique-, y hash: %h y $h{clave}=1), y si tienes un vector de hashes con un vector en uno de sus campos... no pongo ejemplo porque no sabría hacerlo :S. De las refencias no quiero ni acordarme :'(.
  • Es un lenguaje muy productivo: habré programado unas 3000 y pico lineas de código en dos semanas y media, y la funcionalidad conseguida es importante. Además está indicado para administrar sistemas, sobretodo procesando logs (en realidad es la magia de las expresiones regulares, pero bueno... están muy integradas en el lenguaje y eso es bueno).

La verdad es que tengo sentimientos encontrados, porque nunca me ha atraído este lenguaje. Ahora es una mezcla entre ay, si te hubiera conocido antes y Je ne comprends pas, vous suis étrange (nótese que no sé francés). Curioso.

Anotación por Juan J. Martínez, clasificada en: programming, scripting.

Hay 8 comentarios

Gravatar

Se nota un poquito, pero ya haces más que muchos extranjeros, franceses incluidos. "vous suis étrange", arreglado, sería "vous êtes étranger", por lo demás muy bien.
Por ciert, ¿como $&%=$%&"·$ se puede aprender un lenguaje si no sabes ni papa, aunque te guste, y no tienes suficiente tiempo?, lo digo porque me gustaría aprender algo para poder programar.
Gracias.

por un visitante, en 2006-11-08 20:24:40

Gravatar

El perl es para lo que es, eso lo primero: no es para crear aplicaciones complejas, es para administrar sistemas. Y para eso es extremadamente potente, sobre todo, como bien dices, por sus expresiones regulares. Incluso lo puedes combinar con comandos del sistema, Y eso ya es la caña.

Y eso que dicen que está muerto... puf, como se nota que los que lo dicen vienen del mundo windows, en linux está a la orden del día... y seguirá así por mucho tiempo.

por Diego, en 2006-11-09 02:50:56

Gravatar

Hola amigo visitante, pues has hecho la pregunta del millón :)

Yo distinguiría dos objetivos: aprender a programar, que obviamente lo harás en un lenguaje (mientras no sea malo para eso, cualquiera vale), y aprender a programar en un lenguaje. La diferencia está en que en el segundo caso ya sabes programar.

He dado clases de programación (caso 1) en C y C++ (imperativa y orientada a objetos respectivamente), así que bien se puede aprender a programar usando Perl.

Un enlace:
http://www.usebox.net/jjm/docencia/

por Juanjo, en 2006-11-09 09:18:59

Gravatar

Como dice el propio autor del lenguaje, Perl puede aprenderse poco a poco, como un lenguaje natural. De lo más básico (vocabulario y semántica reducida) a lo más complejo (completo dominio de todos los aspectos del lenguaje)

Primero se pueden aprender las estructuras básicas, que existen en todos los lenguajes y son muy similares a las de C, y los tipos de datos más elementales. Con esto ya se puede empezar a programar en Perl, y en muy poco tiempo.

Luego, es cuestión de tiempo ir aprendiendo paulatinamente el resto del lenguaje: nuevas construcciones, nuevas estructuras, nuevas funciones, etc. En Perl se repite el mantra de "hay muchas formas de hacer una misma cosa", con lo que cada programador irá definiendo su estilo o "dialecto" de Perl a medida que programa. Cuanto más se programa, más se aprende.

por luismago, en 2006-11-09 16:20:43

Gravatar

Ya aprendí Perl hace 6 años. Primero por curiosidad, ya que vi que la mayoría de los scripts que había en el departamento estaban escritos así. Pero al cabo de un par de años, me dí cuenta de que se podía hacer de casi todo. Al final, nos dimos cuenta de que las casi 20.000 líneas escritas equivalían a varias veces más escritas en otros lenguajes.

http://xplanet.sourceforge.net/FUDforum2/index.php?t=msg&th=204&start=0

por Joaquin Ferrero, en 2006-11-10 14:03:16

Gravatar

Perl no es un lenguaje de scripting, para sysadmins o para cosas chicas. Perl es un lenguaje multiparadigma MUY potente pero como todos los lenguajes necesita de un ser humano que lo utilice. Si vas a hacer algo grande tienes que hacerlo bien. Conoces algun lenguaje que no sea asi?

Perl no es potente por poder usar llamadas al sistema, perl ES potente. Lo de las llamadas al sistema era algo de perl 4 (ya estamos mas cerca del 6 que del 4)... pero es cierto que mucha gente sigue programando en perl 4. Hay un articulo en oreilly de hace un tiempo que se titulo "Stop programming in perl 4" (lo encontraran en google).

Muy interesante tu post, me ha recordado mis primeros pasos con perl... sigue adelante!

La flexibilidad del lenguaje te permite escribir tu foreach bastante mas simple:

 # Lo mismo que el del post
 print foreach @array;
Actualmente se esta rearmando el grupo de usuarios (perl monguers) de madrid: http://madrid.pm.org y el de barcelona esta activo hace bastante tiempo.

por dk, en 2006-11-10 20:25:14

Gravatar

[b]Muy interesantes todos los comentarios:[b]

Actualmente estoy en el punto de inicio de decidirme a fortalecerme en un lenguaje de programación, agradecería su orientación, mis opciones son:
ASP
PHP
ORACLE
BIC.net
PERL ?
Ante todo, me disculpan la ignorancia, sólo quiero aprender.."!

por Emperlzando..!, en 2006-11-16 17:27:37

Gravatar

Si no sabes programar, aprender a programar en cualquier lenguaje puede valer si el método de aprendizaje es bueno. No me repito, ya lo he dicho en un comentario más arriba.

Hombre, como mínimo aprende un lenguaje, porque en la lista que has dado hay cosas que estrictamente (y sin el estricto :D), no lo son.

Perl, otra vez es algo que han dicho más arriba :D, puede ser un buen objetivo. Haz un par de intentos en tu buscador favorito y seguro que encuentras algún tutorial (aunque lamentablemente dudo que encuentres cosas adecuadas para aprender a programar desde cero -si es tu caso-).

por Juanjo, en 2006-11-16 18:11:27

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: