perl

Upload: garciaefra

Post on 12-Jul-2015

34 views

Category:

Documents


0 download

TRANSCRIPT

PerlEs un lenguaje de programacin muy utilizado para construir aplicaciones CGI para el web. Perl es un acrnimo de Practical Extracting and Reporting Languaje, que viene a indicar que se trata de un lenguaje de programacin muy prctico para extraer informacin de archivos de texto y generar informes a partir del contendido de los ficheros. Es un lenguaje libre de uso, eso quiere decir que es gratuito. Antes estaba muy asociado a la plataforma Unx, pero en la actualidad est disponible en otros sistemas operativos como Windows. Perl es un lenguaje de programacin interpretado, al igual que muchos otros lenguajes de Internet comoJavascript o ASP. Esto quiere decir que el cdigo de los scripts en Perl no se compila sino que cada vez que se quiere ejecutar se lee el cdigo y se pone en marcha interpretando lo que hay escrito. Adems es extensible a partir de otros lenguajes, ya que desde Perl podremos hacer llamadas a subprogramas escritos en otros lenguajes. Tambin desde otros lenguajes podremos ejecutar cdigo Perl. Perl est inspirado a partir de lenguajes como C, sh, awk y sed (algunos provenientes de los sistemas Unx), pero est enfocado a ser ms prctico y fcil que estos ltimos. Es por ello que un programador que haya trabajado con el lenguaje C y los otros tendr menos problemas en entenderlo y utilizarlo rpidamente. Una diferencia fundamental de Perl con respecto a los otros lenguajes es que no limita el tamao de los datos con los que trabaja, el lmite lo pone la memoria que en ese momento se encuentre disponible. Si queremos trabajar con Perl ser necesario tener instalado el interprete del lenguaje. A partir de ese momento podemos ejecutar CGIs en nuestros servidores web. El proceso para conseguirlo puede variar de unos servidores a otros, pero se suelen colocar en un directorio especial del servidor llamado cgi-bin donde hemos colocado los correspondientes permisos CGI. Adems, los archivos con el cdigo tambin debern tener permiso de ejecucin.

http://www.desarrolloweb.com/articulos/541.php

Historia

Larry Wall comenz a trabajar en Perl en 1987 mientras trabajaba como programador en Unisys1 y anunci la versin 1.0 en el grupo de noticias comp.sources.misc el 18 de diciembre de 1987. El lenguaje se expandi rpidamente en los siguientes aos. Perl 2, publicado en 1988, aport un mejor motor de expresiones regulares. Perl 3, publicado en 1989, aadi soporte para datos binarios. Hasta 1991 la nica documentacin de Perl era una simple (y cada vez ms larga) pgina de manual Unix. En 1991 se public Programming Perl (el libro del camello) y se convirti en la referencia de facto del lenguaje. Al mismo tiempo, el nmero de versin de Perl salt a 4, no por marcar un gran cambio en el lenguaje, sino por identificar a la versin que estaba documentada en el libro. Perl 4 trajo consigo una serie de lanzamientos de mantenimiento, culminando en Perl 4.036 en 1993. En este punto, Larry Wall abandon Perl 4 para comenzar a trabajar en Perl 5. Perl 4 se quedara en esa versin hasta hoy. El desarrollo de Perl 5 continu en 1994. La lista de correo perl5-porters se estableci en mayo de 1994 para coordinar el trabajo de adaptacin de Perl 5 a diferentes plataformas. Es el primer foro para desarrollo, mantenimiento y adaptacin de Perl 5. Perl 5 fue publicado el 17 de octubre de 1994. Fue casi una completa reescritura del intrprete y aadi muchas nuevas caractersticas al lenguaje, incluyendo objetos, referencias, paquetes y mdulos. A destacar, los mdulos proveen de un mecanismo para extender el lenguaje sin modificar el intrprete. Esto permiti estabilizar su ncleo principal, adems de permitir a los programadores de Perl aadirle nuevas caractersticas.

El 26 de octubre de 1995, se cre el Comprehensive Perl Archive Network (CPAN). CPAN es una coleccin de sitios web que almacenan y distribuyen fuentes en Perl, binarios, documentacin, scripts y mdulos. Originalmente, cada sitio CPAN deba ser accedido a travs de su propio URL; hoy en da, http://www.cpan.org redirecciona automticamente a uno de los cientos de repositorios espejo de CPAN. En 2008, Perl 5 continua siendo mantenido. Caractersticas importantes y algunas construcciones esenciales han sido aadidas, incluyendo soporte Unicode, Hilos (threads), un soporte importante para la programacin orientada a objetos y otras mejoras. [editar]Nombre Perl se llam originalmente "Pearl", por la Parbola de la Perla. Larry Wall quera darle al lenguaje un nombre corto con connotaciones positivas; asegura que mir (y rechaz) todas las combinaciones de tres y cuatro letras del diccionario. Tambin consider nombrarlo como su esposa Gloria. Wall descubri antes del lanzamiento oficial que ya exista un lenguaje de programacin llamado PEARL y cambi la ortografa del nombre. El nombre normalmente comienza con mayscula (Perl) cuando se refiere al lenguaje y con minsculas (perl) cuando se refiere al propio programa intrprete debido a que los sistemas de ficheros Unix distinguen maysculas y minsculas. Antes del lanzamiento de la primera edicin de Programming Perl era comn referirse al lenguaje como perl; Randal L. Schwartz, sin embargo, forz el nombre en mayscula en el libro para que destacara mejor cuando fuera impreso. La distincin fue subsiguientemente adoptada por la comunidad. El nombre es descrito ocasionalmente como "PERL" (por Practical Extraction and Report Language - Lenguaje Prctico para la Extraccin e Informe). Aunque esta expansin ha prevalecido en muchos manuales actuales, incluyendo la pgina de manual de Perl, es un retroacrnimo y oficialmente el nombre no quiere decir nada. La ortografa de PERL en maysculas es por eso usada comojerga para detectar a individuos ajenos a la comunidad. Sin embargo, se han sugerido varios retroacrnimos, incluyendo el cmico Pathologically Eclectic Rubbish Lister (Contabilizador de Basura Patolgicamente Eclctico). [editar]El

smbolo del camello

Perl se simboliza generalmente por un camello de una sola joroba (camello arbigo o dromedario), que fue la imagen elegida por el editor O'Reilly para la cubierta de Programming Perl, que por consiguiente adquiri el nombre de El Libro del Camello.1 O'Reilly es propietario de este smbolo como marca registrada, pero dice que usa sus derechos legales slo para proteger la "integridad e impacto de este smbolo".2 O'Reilly permite el uso no comercial del smbolo, y ofrece logos Programming Republic of Perl y botones Powered by Perl. Desde hace unos aos, y para evitar este tipo de problemas con la licencia comercial, la Fundacin Perl elabor nuevos logotipos basados en una cebolla, a raz de las conferencias anuales que Larry Wall ofrece con el ttulo: State of the Onion ("Estado de la Cebolla") Onion se pronuncia muy parecido a Union, por lo que suena parecido a State of the Union ("Estado de la Unin"), evento en el cual el Presidente de los Estados Unidos informa a los ciudadanos del estado en que se encuentra su pas. [editar]Descripcin La pgina de manual Unix perlintro(1) dice:

Perl es un lenguaje de propsito general originalmente desarrollado para la manipulacin de texto y que ahora es utilizado para un amplio rango de tareas incluyendo administracin de sistemas,desarrollo web, programacin en red, desarrollo de GUI y ms. Se previ que fuera prctico (facilidad de uso, eficiente, completo) en lugar de hermoso (pequeo, elegante, mnimo). Sus principales caractersticas son que es fcil de usar, soporta tanto laprogramacin estructurada como la programacin orientada a objetos y la programacin funcional, tiene incorporado un poderoso sistema de procesamiento de texto y una enorme coleccin de mdulos disponibles. [editar]Caractersticas La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un lenguaje imperativo, con variables, expresiones, asignaciones, bloques de cdigo delimitados por llaves, estructuras de control y subrutinas. Perl tambin toma caractersticas de la programacin shell. Todas las variables son marcadas con un sigilo precedente (sigil). Los sigilos identifican inequvocamente los nombres de las variables, permitiendo a Perl tener una rica sintaxis. Notablemente, los sigilos permiten interpolar variables directamente dentro de las cadenas de caracteres (strings). Como en los shell, Perl tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del sistema. Perl toma las listas del Lisp, hash (memoria asociativa) del AWK y expresiones regulares del sed. Todo esto simplifica y facilita todas las formas del anlisis sintctico, manejo de texto y tareas de gestin de datos. En Perl 5, se aadieron caractersticas para soportar estructuras de datos complejas, funciones de primer orden (p. e. clausuras como valores) y un modelo de programacin orientada a objetos. stos incluyen referencias, paquetes y una ejecucin de mtodos basada en clases y la introduccin de variables de mbito lxico, que hizo ms fcil escribir cdigo robusto (junto con el pragmastrict). Una caracterstica principal introducida en Perl 5 fue la habilidad de empaquetar cdigo reutilizable como mdulos. Larry Wall indic ms adelante que "la intencin del sistema de mdulos de Perl 5 era apoyar el crecimiento de la cultura Perl en vez del ncleo de Perl".3 Todas las versiones de Perl hacen el tipificado automtico de datos y la gestin de memoria. El intrprete conoce el tipo y requerimientos de almacenamiento de cada objeto en el programa; reserva y libera espacio para ellos segn sea necesario. Las conversiones legales de tipo se hacen de forma automtica en tiempo de ejecucin; las conversiones ilegales son consideradas errores fatales. [editar]Diseo El diseo de Perl puede ser entendido como una respuesta a tres amplias tendencias de la industria informtica: rebaja de los costes en el hardware, aumento de los costes laborales y las mejoras en la tecnologa de compiladores. Anteriormente, muchos lenguajes de ordenador como el Fortran y C, fueron diseados para hacer un uso eficiente de un hardware caro. En contraste, Perl es diseado para hacer un uso eficiente de los costosos programadores de ordenador. Perl tiene muchas caractersticas que facilitan la tarea del programador a costa de unos requerimientos de CPU y memoria mayores. stas incluyen gestin de memoria automtica; tipo de dato dinmico; strings, listas y hashes; expresiones regulares; introspeccin y una funcin eval().

Larry Wall fue adiestrado como lingista y el diseo de Perl ha sido muy aleccionado con principios lingsticos. Ejemplos incluyen la Codificacin Huffman (las construcciones ms comunes deben ser las ms cortas), buena distribucin (la informacin importante debe ir primero) y una larga coleccin de primitivas del lenguaje. Perl favorece las construcciones del lenguaje, tan naturales, como para los humanos son la lectura y la escritura, incluso si eso hace ms complicado al intrprete Perl. La sintaxis de Perl refleja la idea de que "cosas que son diferentes deben parecer diferentes". Por ejemplo, escalares, arrays y hashes tienen diferente sigilo. ndices de array y claves hash usan diferentes clases de parntesis. Strings y expresiones regulares tienen diferentes delimitadores estndar. Esta aproximacin puede contrastarse con lenguajes como Lisp, donde la misma construccin S-expresin y sintaxis bsica se usa para muchos y variados propsitos. Perl tiene caractersticas que soportan una variedad de paradigmas de programacin, como la imperativa, funcional y la orientada a objetos. Al mismo tiempo, Perl no obliga a seguir ningn paradigma en particular, ni obliga al programador a elegir alguna de ellas. Hay un amplio sentido de lo prctico, tanto en el lenguaje Perl como en la comunidad y la cultura que lo rodean. El prefacio de Programming Perl comienza con, "Perl es un lenguaje para tener tu trabajo terminado". Una consecuencia de esto es que Perl no es un lenguaje ordenado. Incluye caractersticas si la gente las usa, tolera excepciones a las reglas y emplea la heurstica para resolver ambigedades sintcticas. Debido a la naturaleza indulgente del compilador, a veces los errores pueden ser difciles de encontrar. Hablando del variado comportamiento de las funciones internas en los contextos de lista y escalar, la pgina de manual de perlfunc(1) dice "En general, hacen lo que tu quieras, siempre que quieras la coherencia." Perl tiene varios lemas que transmiten aspectos de su diseo y uso. Uno es There's more than one way to do it (Hay ms de una forma de hacerlo) (TMTOWTDI, usualmente pronunciado 'Tim Toady'). Otros son "Perl: la motosierra del ejrcito Suizo de los lenguajes de programacin" y "Lmites imprecisos". Una meta prefijada de Perl es hacer las cosas fciles de forma fcil y las tareas difciles, posibles. A Perl tambin se le ha llamado "El esparadrapo de Internet". [editar]Aplicaciones Perl tiene muchas y variadas aplicaciones, gracias a la disponibilidad de muchos mdulos estndares y de terceras partes. Se ha usado desde los primeros das del Web para escribir guiones (scripts) CGI. Es una de las "tres Pes" (Perl, Python y PHP), que son los lenguajes ms populares para la creacin de aplicaciones Web, y es un componente integral de la popular solucin LAMP para el desarrollo web. Grandes proyectos escritos en Perl son Slash, IMDb4 y UseModWiki, un motor de Wiki. Muchos sitios web con alto trfico, como Amazon.com y Ticketmaster.com usan Perl extensamente. Perl se usa a menudo como un "lenguaje pegamento", ligando sistemas e interfaces que no fueron diseados especficamente para interoperar; y para el "escarbado de datos", convirtiendo o procesando grandes cantidades de datos para tareas como por ejemplo crear informes. De hecho, estas fortalezas estn ntimamente unidas. Su combinacin hace a Perl una popular herramienta de propsito general para los administradores de sistemas, especialmente en programas pequeos que pueden ser escritos y ejecutados en una sola lnea de comandos. Perl es tambin ampliamente usado en finanzas y bioinformtica, donde es apreciado por su desarrollo rpido, tanto de aplicaciones como de despliegue, as como la habilidad de manejar grandes volmenes de datos.

[editar]Implementacin Perl est implementado como un intrprete, escrito en C, junto con una gran coleccin de mdulos, escritos en Perl y C. La distribucin fuente tiene, en 2005, 12 MB cuando se empaqueta ycomprime en un fichero tar. El intrprete tiene 150.000 lneas de cdigo C y se compila en un ejecutable de 1 MB en las arquitecturas de hardware ms tpicas. De forma alternativa, el intrprete puede ser compilado como una biblioteca y ser embebida en otros programas. Hay cerca de 500 mdulos en la distribucin, sumando 200.000 lneas de Perl y unas 350.000 lneas adicionales de cdigo C. Mucho del cdigo C en los mdulos consiste en tablas de codificacin de caracteres. El intrprete tiene una arquitectura orientada a objetos. Todos los elementos del lenguaje Perl escalares, listas, hashes, referencias a cdigo, manejadores de archivo estn representados en el intrprete como estructuras C. Las operaciones sobre estas estructuras estn definidas como una numerosa coleccin de macros, typedef y funciones; esto constituye la API C de Perl. La API Perl puede ser desconcertante para el no iniciado, pero sus puntos de entrada siguen un esquema de nombres coherente, que ayuda a los que quieran utilizarla. La ejecucin de un programa Perl se puede dividir, generosamente, en dos fases: tiempo de compilacin y tiempo de ejecucin.5 En tiempo de compilacin el intrprete parsea el texto del programa en un rbol sintctico. En tiempo de ejecucin, ejecuta el programa siguiendo el rbol. El texto es parseado slo una vez y el rbol sintctico es optimizado antes de ser ejecutado, para que la fase de ejecucin sea relativamente eficiente. Las optimizaciones del rbol sintctico en tiempo de compilacin incluyen simplificacin de expresiones constantes, propagacin del contexto y optimizacin en trozos sueltos de cdigo. Sin embargo, las fases de compilacin y ejecucin pueden anidarse: un bloque BEGIN se ejecuta en tiempo de compilacin, mientras que una funcin eval inicia una compilacin durante una ejecucin. Ambas operaciones estn implcitas en otras -de forma notable, la clusula use que carga bibliotecas, conocidas en Perl como mdulos, implica un bloqueBEGIN. Perl es un lenguaje dinmico y tiene una gramtica sensible al contexto que puede quedar afectada por el cdigo ejecutado durante una fase de ejecucin intermedia (Ver ejemplos.6 ). Por eso Perl no puede ser parseado mediante una aplicacin directa de analizadores sintcticos/parseadores Lex/Yacc. En cambio, el intrprete implementa su propio analizador lxico, que coordinado con un parseador modificado GNU bison resuelve las ambigedades del lenguaje. Se ha dicho que "slo perl puede parsear Perl", queriendo decir que slo el intrprete Perl (perl) puede parsear el lenguaje Perl (Perl). La razn de esto se atestigua por las persistentes imperfecciones de otros programas que emprenden la tarea de parsear Perl, como los analizadores de cdigo y los autoindentadores, que tienen que vrselas no slo con las muchas formas de expresar inequvocamente construcciones sintcticas, sino tambin con el hecho de que tambin Perl no puede, en general, ser parseado sin antes ser ejecutado. El mantenimiento del intrprete Perl, a lo largo de los aos, se ha vuelto cada vez ms difcil. El ncleo ha estado en continuo desarrollo desde 1994. El cdigo ha sido optimizado en rendimiento a expensas de la simplicidad, claridad y unas interfaces internas ms fuertes. Nuevas caractersticas han sido aadidas, manteniendo todava, compatibilidad virtualmente completa hacia atrs con las primeras versiones. El tamao y la complejidad del intrprete son una barrera para los desarrolladores que desean trabajar en l. Perl es distribuido con unos 120.000 test funcionales. stos se ejecutan como parte del proceso normal de construccin y comprueban extensamente al intrprete y a sus mdulos principales. Los desarrolladores Perl confan en los test funcionales para asegurarse que los cambios en el intrprete

no introducen errores; recprocamente, los usuarios Perl que vean al intrprete pasar los test funcionales en su sistema pueden tener un alto grado de confianza de que est funcionando adecuadamente. No hay una especificacin o estndar escrito para el lenguaje Perl y no hay planes de crear uno para la versin actual de Perl. Siempre ha existido slo una implementacin del intrprete. Este intrprete, junto con los test funcionales, forman la especificacin de facto del lenguaje. [editar]Disponibilidad Perl es software libre y est licenciado bajo la Licencia Artstica y la GNU General Public License. Existen distribuciones disponibles para la mayora de sistemas operativos. Est especialmente extendido en Unix y en sistemas similares, pero ha sido portado a las plataformas ms modernas (y otras ms obsoletas). Con slo seis excepciones confirmadas, puede ser compilado desde elcdigo fuente en todos los Unix, compatibles POSIX o cualquier otra plataforma Unix compatible. Sin embargo, esto no es normalmente necesario, porque Perl est incluido por defecto en la instalacin de los sistemas operativos ms populares.7 Debido a los cambios especiales necesarios para soportar al Mac OS Classic, existe una adaptacin especial llamada MacPerl.8 [editar]GNU/Linux Perl est instalado por defecto en las distribuciones ms populares de GNU/Linux incluyendo Gentoo, Slackware, Mandriva, Debian, RedHat y SUSE. [editar]Windows Los usuarios de Microsoft Windows normalmente instalan una distribucin binaria de Perl.9 Compilar Perl desde el cdigo fuente bajo Windows es posible, pero la mayora de las instalaciones no disponen del necesario compilador de C. La capa de emulacin Cygwin proporciona otra forma de correr Perl bajo Windows. Cygwin proporciona en entorno parecido al Unix en Windows que incluye gcc, por lo que compilar Perl desde el cdigo es una opcin accesible para los usuarios que prefieren esta opcin. En junio de 2006, win32.perl.org fue lanzado por Adam Kennedy en nombre de la Fundacin Perl. Es una comunidad web "para todo lo relacionado con Windows y Perl".10 [editar]Estructura [editar]Programa

del lenguajeejemplo

En Perl, el programa cannico "Hola mundo" es: #!/usr/bin/perl print "Hola mundo!\n"; La primera lnea contiene el shebang (par de caracteres que identifica el texto que sigue), que le indica al sistema operativo dnde encontrar el intrprete de Perl. La segunda imprime el string Hola mundo! y un carcter de nueva lnea. El shebang es la forma normal para invocar al intrprete en los sistemas Unix. Los sistemas Windows pueden seguir utilizndolo o pueden asociar la extensin de archivo .pl con el intrprete Perl. Algunos editores de texto tambin usan la lnea shebang como una pista sobre el modo de trabajo en que deben operar. Si el programa es ejecutado por perl y no invocado por el shell, la lnea que

empieza por el shebang es parseada para interpretar las opciones. En otro caso, es ignorada. Para ver los detalles de esto, consultar la pgina de manual perlrun. [editar]Tipos

de datos

Perl tiene tres tipos de datos: escalares, listas y hashes:

Un escalar es un solo valor; puede ser un nmero, un string (cadena de caracteres) ouna referencia

Una lista es una coleccin ordenada de escalares (una variable que almacena una lista sellama array)

Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings sellaman claves y los escalares valores. Todas las variables estn precedidas por un sigilo, que identifica el tipo de dato que es accedido (no el tipo de dato de la misma variable). Se puede usar el mismo nombre para variables de diferentes tipos, sin que tengan conflictos. $var # un escalar @var # un array %var # un hash Los nmeros se escriben de la forma usual; los strings estn rodeados entre comillas de varias clases. $n = 42; $nombre = "juan"; $color = 'rojo'; Perl convertir los strings en nmeros y viceversa dependiendo del contexto en que sean usados. En el siguiente ejemplo los strings $n y $m son tratados como nmeros cuando son argumentos del operador suma. Este cdigo imprime el nmero '5', desechando cualquier informacin no numrica de la operacin y dejando los valores de las variables intactos. (El operador de concatenacin no es+, sino ..) $n = "3 manzanas"; $m = "2 naranjas"; print $n + $m; Perl tambin tiene un contexto booleano que utiliza en la evaluacin de declaraciones condicionales. Los siguientes valores en Perl evalan todos como falso: $falso = 0; # el nmero cero $falso = 0.0; # el nmero cero como flotante $falso = '0'; # el string cero $falso = ""; # el string vaco $falso = undef; # el valor devuelto por undef Todos los dems valores se evalan a verdadero. Esto incluye el curioso string auto-descriptivo "0 pero verdadero", que de hecho es 0 como nmero, pero verdadero como booleano. (Cualquierstring no numrico tambin tendr esta propiedad, pero este string en particular es ignorado por Perl en contextos numricos). Las expresiones booleanas evaluadas tambin devuelven valores escalares. Aunque la documentacin no indica qu valor particular se devuelve como verdadero o falso (y por lo tanto no fiable), muchos operadores booleanos devuelven 1 por verdadero y el stringvaco para falso (que evala a cero en contexto numrico). La funcin defined() le dice si la variable tiene algn valor. En el ejemplo anterior defined($falso) ser verdadero con cada uno de los

valores anteriores, excepto undef. Si, especficamente, quiere asegurarse de tener un resultado 1/0 (como en C), necesita realizar el clculo siguiente: my $resultado_real = $resultado_booleano ? 1 : 0; Una lista se define listando sus elementos, separados por comas y rodeados por parntesis donde as sea requerido por la precedencia de los operadores. @puntuaciones = (32, 45, 16, 5); Un hash puede ser inicializado desde una lista de pares clave/valor. %favorito = ( joe => 'rojo', sam => 'azul', ); Los elementos individuales de una lista son accedidos utilizando un ndice numrico, dentro de corchetes. Valores individuales en un hash son accedidos utilizando la correspondiente clave, dentro de llaves. El sigilo $ identifica que el elemento accedido es un escalar. $puntuaciones[2] # un elemento de @puntuaciones $favorito{joe} # un valor de %favorito Mltiples elementos pueden ser accedidos usando en su lugar el sigilo @ (identificando el resultado como una lista). @puntuaciones[2, 3, 1] # tres elementos de @puntuaciones @favorito{'joe', 'sam'} # dos valores de %favorito El nmero de elementos en un array puede ser obtenido evaluando el array en contexto escalar o con la ayuda del sigilo $#. ste ltimo da el ndice del ltimo elemento dentro del array, no el nmero de elementos. $numero = @amigos; $#amigos; # el ndice del ltimo elemento en @amigos $#amigos+1; # normalmente el nmero de elementos en @amigos, # que es uno ms que $#amigos porque el primer elemento tiene el ndice 0, no 1 Hay unas pocas funciones que operan sobre hashes enteros. @nombres_de_clientes = keys %direcciones; todas las claves de %direcciones @direcciones_de_email = values %direcciones; todos los valores de %direcciones [editar]Estructuras de controlArtculo principal: Estructuras de control, en ingls

# guarda en @nombres_de_clientes # guarda en @direcciones_de_email

Perl tiene varias clases de estructuras de control. Tiene estructuras de control orientado al bloque, similar a los de los lenguajes de programacin C y Java. Las condiciones estn rodeadas por parntesis y los bloques subordinados por llaves: etiqueta while ( condicin ) {... } etiqueta while ( condicin ) {... } continue {... } etiqueta for ( expresin inicial; expresin condicional; expresin incremental ) {... }

etiqueta foreach etiqueta foreach if ( condicin ) if ( condicin ) if ( condicin )

var ( lista ) {... } var ( lista ) {... } continue {... } {... } {... } else {... } {... } elsif ( condicin ) {... } else {... }

Cuando se controla a una sola declaracin, los modificadores de declaracin proporcionan una sintaxis ms ligera: declaracin declaracin declaracin declaracin declaracin if unless while until foreach condicin; condicin; condicin; condicin; lista;

Los operadores lgicos cortocircuito son normalmente usados para controlar el flujo del programa a nivel de expresin: expr and expr expr or expr

Las palabras clave de control de flujo next, last, return y redo son expresiones, por lo que pueden ser usadas con los operadores cortocircuito. Perl tambin tiene dos construcciones implcitas para bucles: resultados = grep {... } lista resultados = map {... } lista

grep devuelve todos los elementos de lista en que el bloque subordinado evala a verdadero. map evala el bloque subordinado por cada elemento de lista y devuelve una lista de los valores resultantes. Estas construcciones permiten un estilo simple de programacin funcional. No hay declaracin switch (salto multi-camino) en Perl 5. La documentacin Perl describe media docena de formas de conseguir el mismo efecto usando otras estructuras de control. Existe sin embargo un mdulo Switch, que proporciona la funcionalidad modelada para el prximo Perl 6. Perl incluye una declaracin goto etiqueta, pero es usada raramente. Las situaciones donde en otros lenguajes se utiliza goto no ocurren tan a menudo en Perl debido a sus amplias opciones de control de flujo. Existe tambin una declaracin goto &sub que realiza una llamada 'final'. Termina la subrutina actual e inmediatamente llama a la sub especificada. Esto se usa en situaciones donde una nueva subrutina puede realizar una gestin de la pila ms eficiente que el propio Perl (porque tpicamente no se requiere ningn cambio en la pila actual), y en una recursin muy profunda este tipo de llamadas puede tener un sustancial impacto positivo en el funcionamiento porque evita la sobrecarga de la gestin contexto/pila en el momento de retornar.

[editar]Subrutinas Las subrutinas se definen con la palabra clave sub e invocadas simplemente nombrndolas. Si la subrutina en cuestin no ha sido todava declarada, es necesario, para el proceso de anlisis sintctico, poner los parntesis. foo(); # parntesis necesarios aqu... sub foo {... } foo; #... pero no aqu Una lista de argumentos pueden ser indicados despus del nombre de la subrutina. Los argumentos pueden ser escalares, listas o hashes. foo $x, @y, %z; Los parmetros de una subrutina no necesitan ser declarados, ni en nmero ni en tipo; de hecho, pueden variar en cada llamada. Los arrays son expandidos a sus elementos, los hashes a una lista de pares clave/valor y todo el conjunto es pasado a la subrutina como una indiferenciada lista de escalares. Cualesquiera de los argumentos pasados estn disponibles para la subrutina en el array especial @_. Los elementos de @_ son asociados a los argumentos actuales; cambiando un elemento de @_cambia el argumento correspondiente. Los elementos de @_ pueden ser accedidos con los subndices de la forma normal. $_[0], $_[1] Sin embargo, el cdigo resultante puede ser difcil de leer y los parmetros tener una semntica de pase por referencia, que puede resultar algo no deseable. Un modismo comn es asignar @_ a una lista de variables con nombres. my($x, $y, $z) = @_; Esto afecta tanto a la mnemnica de los nombres de los parmetros como a la semntica de los valores pasados por valor. La palabra clave my indica que las siguientes variables estn lxicamente embebidas en el bloque que las contienen. Otro modismo es sacar los parmetros de @_. Esto es muy comn cuando la subrutina toma un slo argumento. my $x = shift; # Si no se dice nada, nos referimos a @_ Las subrutinas pueden devolver valores. return 42, $x, @y, %z; Si la subrutina no sale va declaracin return, entonces devuelve la ltima expresin evaluada en el cuerpo de la subrutina. Arrays y hashes en el valor de retorno son expandidos a una lista de escalares, igual que si fueran argumentos de una funcin. La expresin devuelta es evaluada en el contexto de la llamada de la subrutina; esto puede sorprender al desprevenido. sub lista { (4, 5, 6) } sub array { @x = (4, 5, 6); @x } $x = lista; $x = array; @x = lista; # devuelve 6 - ltimo elemento de la lista # devuelve 3 - nmero de elementos de la lista # devuelve (4, 5, 6)

@x = array; # devuelve (4, 5, 6) Una subrutina puede descubrir su contexto de llamada con la funcin wantarray. sub cualquiera { wantarray ? (1, 2) : "Naranjas" } $x = cualquiera; # devuelve "Naranjas" @x = cualquiera; # devuelve (1, 2) [editar]Expresiones regularesArtculo principal: Expresiones regulares con Perl, en ingls

El lenguaje Perl incluye una sintaxis especializada para escribir expresiones regulares y el intrprete contiene un motor para emparejar strings con expresiones regulares. El motor de expresiones regulares usa un algoritmo de Vuelta Atrs (backtracking), extendiendo sus capacidades desde el simple emparejamiento de patrones simples con la captura y sustitucin de strings. El motor de expresiones regulares se deriva de regex, escrito por Henry Spencer. La sintaxis de expresiones regulares fue originalmente tomada de las expresiones regulares de Unix Versin 8. Sin embargo, se diferenci ya antes del primer lanzamiento de Perl y desde entonces ha ido incorporando muchas ms caractersticas. Otros lenguajes y aplicaciones estn adoptando las expresiones regulares de Perl (PCRE) en vez de las expresiones regulares POSIX, incluyendo PHP, Ruby, Java y el Servidor HTTP Apache. El operador m// (empareja) permite comprobar un emparejamiento por medio de una expresin regular. (Para abreviar, el precedente m puede ser omitido.) En el caso ms simple, una expresin como: $x =~ m/abc/

evala a verdadero si y slo si el string $x empareja con la expresin regular abc. Partes de la expresin regular pueden ser incluidas entre parntesis: las partes correspondientes de un string emparejado son capturadas. Los strings capturados son asignados de forma secuencial a las variables internas $1, $2, $3,... y una lista de strings capturados se devuelve como valor del emparejamiento. $x =~ m/a(.)c/; # captura el carcter entre 'a' y 'c' y lo guarda en $1

El operador s/// (sustitucin) especifica una operacin de bsqueda y reemplazo: $x =~ s/abc/aBc/; # Convierte la b en mayscula

Las expresiones regulares en Perl pueden tomar unos modificadores. Son sufijos de una sola letra que modifican el significado de la expresin: $x =~ m/abc/i; minscula $x =~ s/abc/aBc/g; # emparejamiento independientemente de si estn en mayscula o # bsqueda y reemplazo global (a lo largo de todo el string)

Las expresiones regulares pueden ser densas y crpticas. Esto es porque la sintaxis de las expresiones regulares es extremadamente compacta, generalmente usando caracteres sueltos o pares de caracteres que representan sus operaciones. Perl alivia un poco este problema con el modificador /x que permite a los programadores poner espacio en blanco y comentarios dentro de las expresiones regulares: $x =~ m/a . c /x; # empareja una 'a' # empareja cualquier carcter # empareja una 'c'

Un uso comn de las expresiones regulares es el de especificar delimitadores de campos al operador split: @palabras = split m/,/, $lnea; # divide la $lnea de valores separados por comas

El operador split complementa la captura de string. La captura de string devuelve las partes de un string que emparejan con una expresin regular; split devuelve las partes que no emparejan. [editar]Interfaz

con bases de datos

Perl est ampliamente favorecido para las aplicaciones de bases de datos. Sus facilidades de manejo de texto son buenas para generar consultas SQL; arrays, hashes y la gestin de memoria automtica hace fcil recoger y procesar los datos devueltos. En las primeras versiones de Perl, las interfaces de bases de datos fueron creadas enlazando el intrprete con una biblioteca de base de datos desde el lado del cliente. Esto era algo torpe; un problema en particular fue que el ejecutable perl resultante estaba restringido a usar slo una interfaz de base de datos, la que haba sido enlazada. Tambin, reenlazar el intrprete era lo suficientemente dificultoso que slo fue realizado para algunas de las ms famosas e importantes bases de datos. En Perl 5, las interfaces de bases de datos estn implementadas por el mdulo Perl DBI. El mdulo DBI presenta una nica interfaz a las aplicaciones Perl, independiente de las bases de datos, mientras que los mdulos DBD:: (Controlador de base de datos) manejan los detalles de acceso a unas 50 bases de datos diferentes. Existen controladores DBD:: para la mayor parte de las bases de datos ANSI SQL. [editar]Comparativa

de funcionamiento

El "Computer Language Shootout Benchmarks" compara el funcionamiento de implementaciones de problemas de programacin tpicos, en diversos lenguajes. Sus implementaciones Perl normalmente toman ms memoria que las implementaciones en otros lenguajes, y esto vara los resultados de velocidad. Las prestaciones de Perl son similares a las de otros lenguajes como Python, PHP o Ruby, pero ms lento que la mayor parte de lenguajes compilados. Perl puede ser ms lento que otros lenguajes haciendo lo mismo porque tiene que compilar el fuente cada vez que corre el programa. En "A Timely Start", Jean-Louis Leroy encontr que sus scripts en Perl tardaban mucho ms tiempo en correr que lo que l esperaba porque el intrprete perl perda la mayor parte del tiempo buscando y compilando los mdulos. Como Perl no puede salvar su

compilacin intermedia como lo hacen Java, Python y Ruby, los scripts Perl conllevan esta sobrecarga en cada ejecucin. La sobrecarga no es un problema cuando la fase de ejecucin es muy larga, pero puede sesgar significativamente en tiempos de ejecucin muy cortos, como se encuentra a menudo en los benchmarks. Una vez que perl inicia la fase de ejecucin, sin embargo, puede ser muy rpido y tpicamente supera a otros lenguajes dinmicos. Tecnologas como mod perl superan esto guardando el programa compilado en memoria entre ejecuciones, o Class::Autouse que retrasa la compilacin de partes del programa hasta que son necesarias. [editar]Optimizando Nicholas Clark, un desarrollador principal de Perl, diserta sobre algunas mejoras en el diseo con Perl y otras soluciones en "When perl is not quite fast enough". Las rutinas ms crticas de un programa Perl pueden escribirse en C o incluso en lenguaje ensamblador con XS o Inline. Optimizar Perl puede requerir un conocimiento ntimo de su funcionamiento en lugar de la destreza con el lenguaje y su sintaxis, significando que el problema est con la implementacin de Perl en lugar de con el lenguaje mismo. Perl 6, la siguiente versin, tomar algunas de estas ideas como lecciones, que otros lenguajes ya han aprendido. [editar]FuturoArtculo principal: Perl 6

En el ao 2000, en la conferencia Perl, Jon Orwant hizo una peticin para una nueva versin del lenguaje.11 Esto condujo a una decisin para comenzar el trabajo del rediseo del lenguaje, que se llamara Perl 6. Se pidieron propuestas a la comunidad Perl para las nuevas caractersticas del lenguaje, y se recibieron ms de 300 RFC (del ingls Request For Comments, peticin de comentarios). Larry Wall estuvo los siguientes aos digiriendo los RFC y sintetizndolos en un entorno de trabajo coherente para Perl 6. Present su diseo de Perl 6 en una serie de documentos llamadosApocalipsis, que se numeran para corresponderse con los captulos de Programming Perl. La actual, inacabada especificacin de Perl 6, est resumida en unos documentos de diseo llamados Sinopsis, que estn numerados para corresponder a los Apocalipsis. Perl 6 no tiene la intencin de ser compatible para atrs, aunque existir un modo de compatibilidad. En 2001 se decidi que Perl 6 corriese en una mquina virtual llamada Parrot. Esto quiere decir que otros lenguajes que usen Parrot podrn ganar acceso nativo a CPAN y permitir algn cierto nivel de desarrollo cruzado. En 2005 Audrey Tang cre el proyecto pugs, una implementacin de Perl 6 en Haskell. Fue y es una plataforma de testeo del lenguaje Perl 6 (separado del desarrollo actual de la implementacin) permitiendo a los diseadores explorar. El proyecto pugs engendr una activa comunidad Perl/Haskell centrada alrededor del canal irc #perl6 en Freenode. Un cierto nmero de caractersticas en el lenguaje Perl 6 muestran una similaridad con las de Haskell y Perl 6 ha sido acogido por la comunidad Haskell como un potencial lenguaje de scripting. En el 2006, Perl 6, Parrot y pugs siguen estando bajo desarrollo y un nuevo mdulo para Perl 5 llamado v6 permite a una parte del cdigo Perl 6 correr directamente sobre Perl 5.

[editar]Diversin

con Perl

Como en C, las competiciones de cdigo ofuscado son un rasgo popular de la cultura Perl. El Obfuscated Perl contest homenajea la virtud de la flexibilidad sintctica de Perl. El programa siguiente imprime el texto "Just another Perl / Unix hacker", usando 32 procesos en paralelo coordinados con pipes. La explicacin completa est disponible en el sitio web del autor. @P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&& close$_}%p;wait until$?;map{/^r/&&}%p;$_=$d[$q];sleep rand(2)if/\S/;print De forma similar al cdigo ofuscado pero con un propsito diferente, "Poesa Perl" es la prctica de escribir poemas que puedan ser compilados como cdigo legal de Perl (aunque generalmente sin sentido). Esta aficin es ms o menos nica en Perl debido al gran nmero de palabras normales del Ingls que el lenguaje utiliza. Los nuevos poemas se publican de forma regular en el sitio Perl Monks, en la seccin Poesa Perl. Parte del saber de Perl est en Black Perl, un ejemplo infame de la potica de Perl. Otro pasatiempo es "Perl Golf". Como con el deporte real, la meta es reducir el nmero de golpes necesarios para completar un objetivo, pero aqu, los "golpes" se refieren a los pulsaciones de teclado en vez de a los recorridos en un club de golf. Se propone una tarea, como "escanear un string de entrada y devolver el palndromo ms grande que contenga" y los participantes intentan batir a sus oponentes escribiendo soluciones que requieran cada vez menos caracteres de cdigo fuente Perl. Otra tradicin entre los hackers Perl es escribir JAPH, que es una especie de pequeos programas ofuscados que imprimen la frase "Just another Perl hacker,". El "cannico" JAPH incluye la coma al final, aunque a menudo se omite, y otras muchas variantes que se han creado (ejemplo,12 que imprime "Just Another Perl Pirate!"). Un mdulo Perl interesante es Lingua::Romana::Perligata (en CPAN). Este mdulo traduce el cdigo fuente de un script escrito en Latn a Perl, permitiendo al programador escribir programas ejecutables en Latn.http://es.wikipedia.org/wiki/Perl#Nombre

Historia de Perl Como primer tema de sta parte vamos a ver un poco de los inicios de Perl, no va a ser muy extenso pues es algo trivial; simplemente para entender un poco sus comienzos. Puede parecer complejo, pero confa en nosotros, cuando entiendas lo bsico no es diferente a aprenderjuegos de poker o cmo conducir un coche lo que se refiere a la prctica, y un alto nivel de pensamiento lgico. Muy bien, antes que nada el lenguaje se llama Perl, solamente la primera P se pone en capitulares. Tradicionalmente el programa que ejecuta los scripts de Perl se llama perl, todo en minsculas. Esto nos servir para ms adelante diferenciar entre el lenguaje y el programa. El lenguaje Perl toma su nombre de Practical Extraction and Report Language y fue ideado por Larry Wall. La primera versin sale en el ao de 1987. Originalmente Larry Wall lo describe como un excelente lenguaje optimizado para leer archivos de texto, extraer informacin de esos archivos y crear reportes basados en esa informacin, combinando lo mejor de C, sed, awk y sh. Para los que conocen alguno de los lenguajes y herramientas antes mencionados, se podrn dar cuenta que la sintxis del lenguaje es muy similar y no tendrn mucho problema en adoptarlo.

Perl se considera un lenguaje interpretado, es decir, no es necesaria una previa compilacin para poder ejecutarse, lo nico que se necesita es darle al interprete, perl, el cdigo que queremos que ejecute. Desde sus inicios Perl ha avanzado mucho y ahora se encuentra en la versin 5 con la versin 6 en pleno desarrollo. Cabe mencionar que Perl hoy en da es usado para una gran variedad de cosas, desde avanzados programas de seguridad hasta sencillos CGIs para administrar formularios. Uno de los fuertes de Perl es la existencia de CPAN, un directorio de mdulos que podemos integrar a nuestros scripts para facilitarnos la vida. CPAN es definitivamente uno de los conos representativos de Perl, otros lenguajes (proyectos) han querido implementar algo similar, pero han fallado. Perl lleva a CPAN desde su nacimiento. La filosofa comunitaria de Perl ha hecho de CPAN lo que es ahora, es el centro de distribucin comunitario de paquetes que ningn otro lenguaje ha tenido.

LAS VARIABLESQu es una variable?

ste es nuestro primer tema, y en l vamos a hablar de la pieza fundamental de cualquier lenguaje de programacin: las variables.

Una variable como bien dice su nombre es algo que puede "variar". Al nosotros hacer un script no tenemos manera de saber toda la informacin que vamos a tener, ya sean resultados de sumas, entradas de datos, etc. Para ello usamos las variables, para almacenar todos esos datos. En Perl hay varios tipos de variables, y les vamos a hechar un vistazo a las mismas: Las Escalares ($variable) En Perl la variable bsica es la escalar. sta variable puede contener cualquier tipo de informacin ya sean nmeros, letras, cadenas de texto, signos, cdigo ASCII, etc, as como cosas ms avanzadas como referencias que veremos ms adelante. Para definir una variable escalar todo lo que tenemos que hacer es: $variable El smbolo $ se usa para identificar a nuestra variable, y despus podemos usar el nombre que queramos. Para nombrar nuestras variables debemos de seguir algunas de reglas: Nuestras variables nicamente pueden nombrarse con valores alfanmericos. El nombre de nuestras variables son sensibles al uso de maysculas y minsculas, esto significa que las variables $variable y $Variable son dos variables distintas. Las variables NO puden comenzar con nmeros, solamente letras o _, ya despus se puede usar cualquier cracter alfanmerico Al definir nuestra variables es buen hbito usar el keyword "my"

Muy bien, ahora veamos como podemos definir una variable e iniciarla con un valor: my $numero = 10; Tambin podemos definirla primero, y despus inicializarla: my $numero; $numero = 10; En ambos casos nuestra variable terminar con el valor "10". Podemos asignar el valor de una variable a otra, por ejemplo:

1 2 3

my $variableA = "Mi Variable"; my $variableB = $variableA;

4 5 6 7

my $variableC; $variableC = $variableA;

En la lnea 1 definimos e inicializamos la variable $variableA con el valor "Mi Variable". Luego en la lnea 3 definimos e inicializamos la variable $variableB con el valor de $variableA, de sta manera ambas variable tendrn el mismo valor. Y en las lneas 5 y 7, definimos la variable, e inicializamos la variable en dos pasos distintos. En este momento podremos ver que cada lnea de cdigo de Perl debe de acabar con un ; Los Arrays (@array) Los arrays o arreglos como se les llama comnmente en espaol no son exactamente vectores, ms que nada se les puede definir como una lista de cosas, stas cosas pueden ser nmeros, letras, palabras o hasta variables. Este tipo de variable es un punto sumamente fuerte de Perl y que te vers usando ms de una vez en tus scripts. Nuestro array se define de la siguiente manera: my @array; Vemos que debemos de usar el smbolo @ para definir nuestros arrays. Como los arrays son listas de cosas, es diferente la manera en que los inicializamos: my @array = ('Perro','Gato','Gallina','Pez'); Aqu definimos e inicializamos nuestra variable, para definir la lista con la que queremos inicializar a nuestro array, ponemos todos los elementos de la lista entre parntesis y separando cada elemento por una coma. Aqu como cada elemento de la lista es una cadena de texto, por eso los ponemos entre comillas sencillas, aunque tambin podran ser comillas dobles. La separacin es por comas, as que no importa la cantidad de espacios que haya entre cada elemento, a continuacin pongo un ejemplo:

1 2 3 4 5 6

my @array = (

'Perro', 'Gato', 'Gallina', 'Pez' );

Ya que tenemos una lista de "cosas" cargadas dentro de nuestro array, ahora debemos de poder tomar alguno de estos elementos. A cada elemento dentro de nuestra lista le corresponde un nmero, basado en su posicin dentro de la lista, lo hay que tener en mente, es que Perl empieza a contar los elementos desde 0 NO desde 1. Por lo que en nuestro array con la lista de animales, el elemento 0 sera "Perro" y el elemento 1 sera "Gato", as sucesivamente. Para tomar algn elemento de nuestra lista debemos de usar la siguiente sintxis: $array[]; En donde es un nmero que corresponde al elemento que queremos tomar, veamos un ejemplo

1 my @array = ('Perro','Gato','Gallina','Pez'); 2 3 my $animal = $array[3];En la lnea 1 definimos e inicializamos nuestro array, en la lnea 3 asignamos el elemento 3 de nuestro array a la variable $animal. Sabes cul ser el valor de nuestra variable $animal?

Si pensaste "Pez" ests en lo correcto. Los hashes (%hash) La variable hash o arreglo asociativo es un tipo de variable sumamente especial en Perl, ya que pocos lenguajes cuentan con variables de este tipo. El hash es un tipo de lista por medio de la cual podemos llamar a sus valores con el uso de llaves. As dependiendo de la llave que se llame ser el valor que se retorne. Entenderemos esto ms a fondo ahora que veamos unos ejemplos. El hash se define de la siguiente manera: my %hash; Vemos que el smbolo para diferenciar a las variables de tipo hash es el smbolo %. Ahora, como se explic nuestro hash es una lista que corresponden a llaves y valores, los hashes los podemos inicializar de dos maneras distintas: my %hash = ('Uno','One','Dos','Two','Tres','Three'); Parece similar a una array pero hay una gran diferencia, pues realmente lo que ve Perl es lo siguiente:

1 2 3

Uno => One Dos => Two Tres => Three

Va tomando de dos en dos los elementos, el primer elemento de cada par lo toma como llave, y el segundo elemento como su valor. Por qu se dicen "llaves"? Es debido a que funciona como una llave real, con una llave solamente podemos abrir una puerta, de sta manera con una llave solamente podremos adquirir un valor. Para llamar el valor de una de nuestras llaves la sintxis es: $hash{}; En donde