The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NOMBRE

perlfaq1 - Preguntas generales sobre Perl

DESCRIPCIÓN

En esta sección de las preguntas más frecuentes se proporcionan respuestas a preguntas muy generales sobre Perl.

¿Qué es Perl?

Perl es un lenguaje de programación de alto nivel con una herencia ecléctica, creado por Larry Wall con la ayuda de miles de programadores. Se deriva del extendido lenguaje de programación C y, en menor medida, de sed, awk, la shell de Unix, y al menos una docena más de lenguajes y herramientas. Las características de manipulación de texto, archivos y procesos que ofrece Perl lo convierten en un lenguaje especialmente adecuado para tareas que requieren crear rápidamente prototipos, utilidades del sistema, herramientas de software, tareas de administración de sistemas, acceso a bases de datos, programación gráfica, conexión a redes y programación web. Por estas cualidades es muy popular entre los administradores de sistemas y los programadores de scripts CGI, pero también lo usan matemáticos, expertos en ingeniería genética, periodistas e incluso directivos. Es posible que a usted también le resulte útil.

¿Quién respalda a Perl? ¿Quién lo desarrolla? ¿Por qué es gratis?

La cultura de Internet existente antes de que "la red" se convirtiera en un fenómeno de masas, y las firmes convicciones de Larry Wall, el creador de Perl, dieron lugar a la política de distribución libre y abierta de perl. El soporte de Perl lo ofrecen sus usuarios. El núcleo, la biblioteca Perl estándar, los módulos opcionales y esta documentación han sido desarrollados por voluntarios. Para obtener más información, consulte la nota personal que se incluye al final del archivo README de la distribución del código fuente de perl. En perlhist (nuevo desde la versión 5.005) está registrado el historial de lanzamiento de versiones de Perl.

En concreto, el núcleo del equipo de desarrollo (denominado Perl Porters) está integrado por un grupo variopinto de personas de gran altruismo, dedicadas a producir gratuitamente software de mejor calidad que el que se podría obtener pagando. Si desea curiosear los desarrollos pendientes, puede consultar el archivo mensajes de la lista de correo en http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ y http://archive.develooper.com/perl5-porters@perl.org/, o el grupo de noticias nntp://nntp.perl.org/perl.perl5.porters (también está disponible a través de una interfaz web en http://nntp.perl.org/group/perl.perl5.porters), o bien leer las preguntas más frecuentes en http://dev.perl.org/perl5/docs/p5p-faq.html. También puede suscribirse a la lista de correo enviando una solicitud de suscripción a perl5-porters-subscribe@perl.org (solo tiene que enviar un mensaje vacío sin asunto).

Aunque el proyecto GNU incluye Perl en sus distribuciones, no existe "GNU Perl". La Free Software Foundation no tiene nada que ver con el desarrollo y el mantenimiento de Perl. Los términos de la licencia de Perl también son más flexibles en general que los de las licencias de software GNU.

Si lo desea, puede obtener soporte comercial para Perl, pero a la mayoría de los usuarios les bastará con el soporte informal. Vea la respuesta a la pregunta "¿Dónde puedo adquirir una versión comercial de Perl?" para obtener más información.

¿Qué versión de Perl debo utilizar?

(contribución de brian d foy)

Esto suele ser una cuestión de opinión y gusto, y no hay una respuesta definitiva para todos. En general, conviene usar la versión estable actual o la versión estable inmediatamente anterior. En la actualidad, éstas son perl5.14.x y perl5.12.x respectivamente.

Si desea usar otras versiones, para decidir cuál es la que más le conviene debe tener en cuenta varias cosas, como las siguientes:

  • Si todo funciona bien, la situación puede cambiar al actualizar perl (como mínimo pueden surgir nuevas advertencias).

  • Las versiones más recientes de Perl incorporan más correcciones de errores.

  • La comunidad Perl tiende a ofrecer soporte para las versiones más recientes, por lo que le costará menos encontrar ayuda para estas versiones.

  • En las versiones anteriores a perl5.004 había problemas de seguridad graves con desbordamiento del búfer y, en algunos casos, notificaciones del CERT (por ejemplo, http://www.cert.org/advisories/CA-1997-17.html).

  • Las versiones más recientes suelen estar menos implementadas y probadas. Si no le gusta arriesgar, es posible que prefiera esperar unos meses para ver qué problemas detectan los usuarios.

  • Las versiones anteriores más recientes (en este caso, perl5.10.x) suelen mantenerse durante un tiempo, aunque en menor medida que las versiones actuales.

  • Actualmente nadie ofrece soporte para Perl 4 de forma activa. Hace diez años era un camello muerto (según este documento). Ahora, sus huesos pelados, rotos o erosionados, solo se asemejan vagamente a un esqueleto.

  • Aún no está prevista una fecha de lanzamiento de Perl 6. La nueva versión estará disponible cuando llegue el momento. Decimos en broma que saldrá en Navidad, pero no confirmamos el año de lanzamiento. Puede seguir su desarrollo, pero no debe preocuparse por tener que actualizar Perl; nadie va a quitarle Perl 5.

  • Hay dos líneas de desarrollo de perl: una versión de mantenimiento y una versión experimental. Las versiones de mantenimiento son estables; en estas versiones se utiliza un número par como número de versión secundaria (p.ej., perl5.10.x, donde 10 es el número de versión secundaria). Las versiones experimentales pueden incluir características que no se incluyen en las versiones estables; en este caso el número de versión secundaria es un número impar (p. ej., perl5.9.x, donde 9 es la versión secundaria).

¿Qué son Perl 4, Perl 5 y Perl 6?

(contribución de brian d foy)

Se puede resumir de la siguiente manera: Perl 4 es el pasado, Perl 5 es el presente y Perl 6 es el futuro.

El número que va detrás de Perl (el 5 de Perl 5) es la versión principal del intérprete de Perl (es decir, perl), así como la versión del lenguaje. Cada versión principal incorpora diferencias importantes que no son compatibles con las versiones anteriores.

La versión principal actual de Perl es Perl 5, y se lanzó en 1994. Permite ejecutar scripts de la versión principal anterior, Perl 4 (lanzada en marzo de 1991), pero incluye diferencias importantes. Perl 5 incorpora referencias, estructuras de datos complejas y módulos. El intérprete de Perl 5 fue una reescritura completa del código fuente de perl.

Perl 6 es la siguiente versión principal de Perl, pero no es un sustituto de Perl 5. Su sintaxis y su diseño aún están en fase de desarrollo. El trabajo se inició en 2002 y sigue en curso. Algunas de las características más interesantes de Perl 6 se han incluido en las versiones más recientes de Perl 5, y algunos módulos de Perl 5 le permiten usar la sintaxis de Perl 6 en sus programas. Actualmente la implementación más avanzada de Perl 6 es Rakudo ( http://rakudo.org ).

En perlhist encontrará el historial de revisiones de Perl.

¿Qué es Ponie?

(contribución de brian d foy)

Ponie significa "Perl On the New Internal Engine" (Perl en el nuevo motor interno). Este proyecto lo inició Arthur Bergman (de Fotango) en 2003, y posteriormente lo adoptó The Perl Foundation. Se abandonó en 2006 ( http://www.nntp.perl.org/group/perl.ponie.dev/487 ).

La idea de Ponie era renovar los componentes internos de Perl para traducir código Perl 5 a Perl 6 (o a cualquier otro lenguaje compatible con Parrot). Esto permitiría seguir utilizando Perl 5 con Parrot, la máquina virtual que compilará y ejecutará bytecode de Perl 6.

¿Qué es Perl 6?

En la Segunda Convención de Software Open Source de O'Reilly, Larry Wall anunció que el desarrollo de Perl 6 iba a empezar en serio. Perl 6 era un nombre que se solía usar para hacer referencia a un proyecto de Chip Salzenberg, con nombre clave Topaz, consistente en reescribir Perl en C++. La experiencia proporcionada por Topaz resultó muy útil para la siguiente versión de Perl y su implementación, pero el proyecto acabó por abandonarse.

Si desea obtener más información sobre Perl 6 o ayudar en la cruzada para mejorar Perl, visite la página para desarrolladores de Perl 6 en http://dev.perl.org/perl6/ y anímese a participar en el proyecto.

El lanzamiento de Perl 6 aún no está programado, pero recuerde que Perl 5 seguirá vivo mucho tiempo después de que esto ocurra. No espere a que salga Perl 6 para hacer lo que tenga que hacer.

"Cuando hablamos de reinventar todo lo que sea necesario, no lo decimos en broma." --Larry Wall

¿Es Perl estable?

Las versiones de producción, que incorporan correcciones de errores y funcionalidad nueva, se someten a pruebas intensivas antes de su lanzamiento. Desde el lanzamiento de la versión 5.000 no hemos lanzado más de una versión de producción al año (en promedio).

Ocasionalmente, Larry y el equipo de desarrollo de Perl realizan cambios en los componentes internos del lenguaje, pero siempre se hace lo posible por mantener la compatibilidad con las versiones anteriores. Aunque no todos los scripts de Perl 4 se ejecutan sin errores en Perl 5, una actualización de perl no invalidará casi nunca un programa escrito para una versión anterior de perl (salvo correcciones de errores accidentales o una palabra clave nueva).

¿Es difícil aprender a programar en Perl?

No. Es fácil adquirir los conocimientos básicos; y también lo es seguir aprendiendo. Perl se parece a la mayoría de los lenguajes de programación con los que es probable que tenga experiencia, por lo que si ya ha escrito programas en C, scripts en awk o de shell, o incluso un programa en BASIC, no le costará adaptarse.

La mayoría de las tareas sólo requieren conocer un pequeño subconjunto del lenguaje Perl. Uno de los lemas que dirigen el desarrollo de Perl es "se puede hacer de varias maneras", que es la traducción de "there's more than one way to do it" (o TMTOWTDI, que en inglés se pronuncia como "tim toady"). Así, la curva de aprendizaje de Perl tiene una pendiente suave (es fácil de aprender) y larga (si desea seguir profundizando, puede aprender a hacer muchas cosas).

Por último, como Perl es frecuentemente un lenguaje interpretado (aunque no siempre y, desde luego, no por definición), puede escribir sus programas y probarlos sin un paso de compilación intermedia, lo que le permite experimentar y probar/depurar de manera rápida y sencilla. Esta facilidad para realizar experimentos también allana la curva de aprendizaje.

Si tiene experiencia en el uso de Unix, cualquier tipo de experiencia en programación, conocimientos de expresiones regulares y la capacidad de leer y entender el código de otros programadores, le costará menos aprender Perl. Cuando se enfrente a un problema, es probable que pueda obtener un ejemplo que funciona (generalmente gratis) de alguien que lo haya hecho ya. Y no olvidemos los módulos Perl. Se describen en la parte 3 de este conjunto de documentos sobre preguntas más frecuentes. CPAN se describe en la parte 2.

¿Cómo es Perl en comparación con otros lenguajes como Java, Python, REXX, Scheme o Tcl?

Gana en algunos aspectos y pierde en otros. Precisamente las áreas en las que es bueno o malo suelen ser una opción personal, por lo que hacer esta pregunta en Usenet conlleva un riesgo elevado de iniciar una guerra santa inútil.

Probablemente lo mejor sea escribir código equivalente para realizar una serie de tareas. Estos lenguajes tienen sus propios grupos de noticias, en los que puede obtener más información sobre ellos (preferiblemente sin herir sensibilidades).

Si no puede contener su curiosidad, en http://www.perl.com/doc/FMTEYEWTK/versus/ encontrará algunos documentos con comparaciones.

¿Puedo hacer [tarea] en Perl?

Por su flexibilidad y capacidad de ampliación, Perl se puede usar prácticamente para cualquier tarea, desde el procesamiento de archivos en una línea hasta el desarrollo de sistemas grandes y complejos. Para muchas personas, Perl es un buen sustituto de los scripts de shell. Para otros, es un cómodo sustituto de alto nivel para la mayor parte de los programas que desarrollarían en lenguajes de bajo nivel como C o C++. En última instancia, el usuario (y posiblemente sus jefes) deberán decidir para qué tareas pueden usar Perl, y para cuáles no.

Si tiene una biblioteca que proporciona una API, puede hacer que cualquier componente de la misma esté disponible como cualquier otra función o variable de Perl mediante una extensión programada en C o C++, y vinculada dinámicamente al intérprete perl principal. También puede optar por trabajar en sentido contrario: desarrollar el programa principal en C o C++, y después vincular código Perl sobre la marcha para crear una aplicación eficaz. Vea perlembed.

Sin embargo, siempre habrá lenguajes reducidos de propósito específico orientados a un dominio de un problema concreto, más cómodos para afrontar determinados tipos de problemas. Perl trata de cubrir todas las necesidades, en lugar de limitarse a fines específicos. Algunos ejemplos de lenguajes especializados son prolog y matlab.

¿Cuándo no debo elegir Perl?

Cuando su jefe se lo prohíba; en ese caso, debe pensar en reemplazarlo (a su jefe) :-).

La verdad, una buena razón es tener una aplicación escrita en otro lenguaje que funciona bien y está bien programada, o disponer de un lenguaje para aplicaciones diseñado específicamente para una tarea determinada (como prolog o make).

Por diversos motivos, es probable que Perl no sea adecuado para sistemas incrustados en tiempo real, trabajo de desarrollo de sistemas operativos a bajo nivel, como controladores de dispositivos o código de cambio de contexto de hilos de ejecución, aplicaciones complejas de memoria compartida y múltiples hilos de ejecución, o aplicaciones extremadamente grandes. Notará que perl no está programado en Perl.

En esencia, Perl es un lenguaje de tipos dinámicos, no de tipos estáticos. Nadie le reprochará que no lo utilice para desarrollar código de control de centrales nucleares o neurocirugía. Larry también dormirá mejor (si logra no pensar en los programas que se crean para Wall Street).

¿Cuál es la diferencia entre "perl" y "Perl"?

Un bit. ¡Ah, no se refería a ASCII! :-) Larry usa "Perl" para designar el lenguaje y "perl" para designar su implementación (es decir, el intérprete). Ésta es la razón por la que Tom dice que "solo perl puede analizar Perl".

Antes de la primera edición de Programming perl, el lenguaje se solía llamar "perl", y su nombre aparecía así en el título porque hacía referencia al intérprete. En el libro, Randal Schwartz escribió el nombre del lenguaje con inicial mayúscula para que destacara más en la composición tipográfica. La comunidad adoptó esta convención y la segunda edición pasó a llamarse Programming Perl, con la versión con inicial mayúscula en el nombre para referirse al lenguaje.

Usted puede elegir adoptarla o no. Por ejemplo, por paralelismo podemos intuir que "awk y perl" y "Python y Perl" son aceptables, mientras que "awk y Perl" y "Python y perl" no lo son. Pero nunca escriba "PERL", ya que perl no es un acrónimo (pese al folclore apócrifo y los desarrollos inventados posteriormente).

¿Se debe decir programa Perl o script Perl?

A Larry le da igual. Dice (medio en broma) que "un script (guión) es lo que se le da a los actores, y que un programa es lo que se ofrece al público."

Originalmente, un script era una secuencia cerrada de comandos normalmente interactivos (es decir, un script de chat). Algo como un script de chat UUCP o PPP, o un script de automatización con la utilidad expect, se ajusta muy bien a esta definición, igual que los scripts de configuración ejecutados en el inicio de un programa, como .cshrc o .ircrc, por ejemplo. Los scripts de chat sólo eran activadores de programas existentes, no programas autónomos por derecho propio.

Un científico de computación puede explicarle correctamente que, en realidad, todos los programas son interpretados y solo se diferencian en el grado en que lo son. Pero si hace esta pregunta a alguien que no es un científico de computación, pueden decirle que un programa se compila para generar código máquina físico que se puede ejecutar repetidamente, mientras que un script debe ser traducido por un programa cada vez que se ejecuta.

Ahora que mercaderes sin escrúpulos ni conocimientos se han apropiado de los términos "script" y "scripting" para sus viles propósitos, se les ha empezado a asociar significados extraños, generalmente peyorativos, como "programación poco seria" o "programación menor". Como consecuencia, algunos programadores de Perl prefieren evitarlos.

¿Qué es un JAPH?

(contribución de brian d foy)

JAPH significa "Just another Perl hacker". A finales de los ochenta, Randal Schwartz empezó a utilizar esta firma en mensajes de correo electrónico y usenet. Previamente había utilizado esta frase con muchos sujetos distintos ("Just another x hacker,"), así que para distinguir su JAPH decidió empezar a escribir la firma como un programa Perl:

        print "Just another Perl hacker,";

Otras personas adoptaron esta tendencia y empezaron a escribir programas astutos o enrevesados para producir el mismo resultado, y se descontroló el asunto, lo que proporcionó grandes momentos de diversión a sus creadores y lectores.

En CPAN encontrará varios programas JAPH, en http://www.cpan.org/misc/japh.

¿Dónde puedo obtener una lista de citas ingeniosas de Larry Wall?

(contribución de brian d foy)

Busque "larry wall quotes" en Google. Incluso puede probar el botón "Voy a tener suerte" :)

En Wikiquote están registradas las citas ingeniosas de Larry, junto con su fuente. Se incluyen mensajes de usenet y comentarios de códigos fuente.

Si prefiere un archivo de texto simple, puede descargarlo desde http://www.cpan.org/misc/lwall-quotes.txt.gz .

¿Cómo puedo animar a otros programadores a probar Perl?

(contribución de brian d foy)

Hágales ver que es por su propio interés. Si nunca han utilizado Perl y se sienten inseguros, busque alguna tarea en la que Perl les pueda ayudar. Esta ayuda puede implicar un ahorro (de tiempo, dinero o dolores de cabeza) o una aportación (en forma de flexibilidad, eficacia o facilidad para realizar pruebas).

En general, las ventajas que ofrece un lenguaje están muy relacionadas con la destreza de los usuarios del lenguaje. Si con Perl usted y su equipo pueden desarrollar de manera más rápida y mejor, su productividad aumentará. Recuerde que las personas suelen ser más receptivas cuando reciben algo. Si le oponen resistencia, averigüe qué necesitan y hágales ver en qué medida Perl podría cubrir sus necesidades.

No tiene que preocuparse de buscar o pagar por usar Perl; está disponible gratuitamente y varios sistemas operativos populares lo incluyen. La comunidad ofrece soporte en foros como Perlmonks ( http://www.perlmonks.com ) y las distintas listas de correo de Perl ( http://lists.perl.org ). Generalmente, siempre que plantee algún problema recibirá rápidamente ayuda para solucionarlo.

Por último, tenga en cuenta que Perl puede no ser la herramienta adecuada para algunas tareas. Si sus afirmaciones son razonables y están basadas en la realidad, sus esfuerzos de evangelización tendrán más éxito. En cambio, si defiende sus ideas de manera dogmática, hará que las personas desconfíen de su mensaje. Sea honesto y admita posibles desventajas de elegir Perl. Al fin y al cabo, toda elección conlleva ventajas y desventajas.

Es posible que estos vínculos le resulten de utilidad:

  • http://perltraining.com.au/whyperl.html

  • http://www.perl.org/advocacy/whyperl.html

AUTOR Y COPYRIGHT

Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington y otros autores indicados. Reservados todos los derechos.

Esta documentación es libre; puede redistribuirla o modificarla en los mismos términos que Perl.

Independientemente de su distribución, todos los ejemplos de código incluidos son de dominio público. Le permitimos y animamos a utilizar este código y los derivados que surjan en sus propios programas, ya sea con fines de diversión o beneficio. Le agradeceremos que incluya en su código una mención a estos documentos de preguntas más frecuentes, pero no le exigimos que lo haga.

TRADUCTORES

  • Joaquín Ferrero (Tech Lead), explorer + POD2ES at joaquinferrero.com

  • Enrique Nell (Language Lead), blas.gordon + POD2ES at gmail.com

1 POD Error

The following errors were encountered while parsing the POD:

Around line 5:

Non-ASCII character seen before =encoding in 'DESCRIPCIÓN'. Assuming CP1252