Lenguaje Perl

download Lenguaje Perl

of 14

description

Lenguaje Perl

Transcript of Lenguaje Perl

  • LENGUAJE PERL

    PARA QUE SIRVE?

    Aplicaciones del lenguaje Perl Prcticamente, sirve para todo. Todas las tareas de

    administracin de UNIX se pueden simplificar con un programa en Perl. Se usa tambin

    para tratamiento y generacin de ficheros de texto. Tambin hay proyectos completos y

    complejos escritos en Perl, pero son los menos.

    La forma del lenguaje facilita la programacin rpida y sucia , el hacer un programa rpido

    para que funcione. Esto hace tambin que se utilice para hacer prototipos rpidos de algn

    algoritmo que queremos ver funcionar antes que tomarnos la molestia de programarlo en un

    lenguaje ms eficiente, como el c++. Y ltimamente ha encontrado su aplicacin en la

    escritura de CGI (common gateway interface), o scripts ejecutados desde pginas de la

    World Wide Web. La mayora de los programas que se encuentra uno para procesar

    formularios en la Internet llevan la extensin .pl, lo cual denota que estn escritos en Perl.

    En general, los programas en Perl se ejecutan en el servidor, como todos los programas

    CGI, a diferencia de otros programas ejecutados por el cliente (generalmente un navegador

    como el Internet Explorer de Microchof o el Navigator), como aquellos escritos en

    JavaScript o Java. Existen adems extensiones al Apache (mod_perl) que permiten ejecutar

    directamente programas en Perl desde el servidor de HTTP.

    Mediante una serie de mdulos adicionales, tales como el DBD o el ODBC, Perl puede

    servir para acceder a bases de datos, desde BD gratuitas como MySQL hasta el Microsoft

    SQL server usando ODBC. Por supuesto, esto se puede combinar con un CGI para hacer

    aplicaciones tales como un carrito de la compra para un sitio web.

    COMO SE USA?

    Cmo conseguir e instalar programas en Perl Primero, hay que bajarse e instalar alguna

    versin de Perl. Hay versiones para casi todos los sistemas operativos, o sea que no debera

    de ser complicado.

    DESCRIPCION:

    Perl es un lenguaje visualizado para la manipulacin de cadenas de caracteres, archivos y

    procesos. Esta manipulacin se ve simplificada por el importante nmero de operadores a

    disposicin del usuario.

  • Para trabajar con Perl se requieren dos requerimientos bsicos y fciles de conseguir:

    Un editor de texto para poder escribir los programas Perl.

    El intrprete de Perl, que ejecute los programas realizados con Perl.

    Es una combinacin de las caractersticas de los lenguajes ms usados por los

    programadores de sistemas, como son los shell del sistema operativo UNIX, los utilidad

    (que incluye un lenguaje interpretado propio) awk para formateo y tratamiento de texto e

    incluso caractersticas de Pascal, aunque su potencia se basa en la similitud con las mejores

    caractersticas del lenguaje estructurado C. Es por esto que el lenguaje Perl se percibe

    habitualmente como un lenguaje intermedio entre los Shell scripts y la programacin en C.

    Esto debido a que los programas en Perl son una sucesin de instrucciones y son similares a

    los shell scripts porque no existe un procedimiento principal como la subrutina main en C.

    Sin embargo, se parece al lenguaje C en su sintaxis y en el nmero importante de funciones

    que permiten la manipulacin de cadenas de caracteres y archivos. Por todo esto, Perl es un

    lenguaje muy utilizado en los dos campos siguientes:

    1. La administracin de sistemas operativos, debido a que, por sus caractersticas Perl es

    muy potente en la creacin de pequeos programas que pueden ser usados como filtros para

    obtener informacin de ficheros, realizar bsquedas, entre otras cosas. Adems, aunque

    Perl naci en un entorno Unix, hay versiones para casi todas las plataformas existentes.

    2. La creacin de formularios en la Web. Se ha usado desde los primeros das del Web para

    escribir scripts CGI (Common Gateway Interface), los cuales realizan el intercambio de

    informacin entre aplicaciones externas y servicios de informacin, es decir, se encargan de

    tratar y hacer llegar la informacin que el cliente WWW manda al servidor a travs de un

    formulario. Es una de las "tres Ps (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 (Linux Apache MySQL Perl) para el desarrollo Web. Grandes proyectos

    escritos en Perl son Slash, IMDb y UseModWiki, un motor de Wikipedia. En otras

    palabras, muchos sitios Web con alto trfico de usuarios.

    Actualmente existen dos versiones altamente populares de Perl, la 4.3 y la 5.0, habiendo

    diferencias importantes entre una versin y otra, esto debido a que no son totalmente

    compatibles. La versin 5 de Perles una reescritura en donde se aadieron caractersticas

    para soportar estructuras de datos complejas, y un modelo de programacin orientado 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.

  • Esto rompe en gran medida con la filosofa tradicional de Perl de una programacin ms

    parecida a los Shells de Unix que al modular lenguaje C, de modo que las libreras, por

    ejemplo para creacin de CGIs, no funcionan de un mtodo a otro.

    Adems, el lenguaje Perl no es precompilado, pero an as es ms rpido que la mayora de

    lenguajes interpretados. Esto se debe a que los programas en Perl son analizados,

    interpretados y compilados por el interprete perl antes de su ejecucin.

    Esto quiere decir que no hace falta un fichero binario para poder ejecutar las instrucciones

    que hemos codificado usando este lenguaje, es decir, es interpretado, aunque el intrprete

    de Perl "compila" los programas antes de ejecutarlos . Por esta razn es que se dice que es

    un lenguaje pseudo compilado, o sea, una fusin entre compiladores e intrpretes.

    Es importante en este punto la descripcin de lo que es un intrprete y cual es su diferencia

    con un compilador, as como sus ventajas y desventajas, ya que los lenguajes

    interpretativos se estn convirtiendo en una tendencia con mucha fuerza en la actualidad.

    CARACTERISTICAS

    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 signo precedente (sigil). Los sigil identifican inequvocamente los

    nombres de las variables, permitiendo a Perl tener una rica sintaxis. Notablemente, los sigil

    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.

    Existen varias caractersticas acerca de Perl que son importantes de rescatar, las cuales se

    mencionan a

    continuacin:

    1. Es fcil de usar, aunque es difcil de aprender. Cuando se ha programado en Perl por

    varias horas,

    Perl se va a ir haciendo cada vez ms fcil de implementar. Este lenguaje se desarroll

    pensando

    en que el lenguaje fuera prctico (fcil de usar, eficiente, y completo) en lugar de pequeo,

  • elegante y mnimo, adems de que esta enfocado hacia un desarrollador que posee cierta

    cantidad

    de conocimientos sobre el lenguaje y no as hacia un estudiante que esta aprendiendo.

    2. Existen muy pocas cosas que no se pueden hacer con este lenguaje, por lo que se le

    puede

    considerar como un lenguaje que no tiene fronteras. Con Perl se puede programar cualquier

    necesidad que se tenga, ya que existen libreras y mdulos para casi cualquier cosa que se

    requiera, pero hay aplicaciones que requieren mucha rapidez en las cuales es mejor utilizar

    otros

    lenguajes que no sean interpretados.

    3. Es rpido de crear, ya que no posee funciones que, aunque sean bastante interesantes,

    hagan

    disminuir la velocidad de desarrollo de una aplicacin del lenguaje.

    4. El lenguaje es feo, siendo esta una de las principales razones para su difcil aprendizaje,

    aunque

    esto se compensa con el poder de alcance del lenguaje. Es por esto que Larry Wall escogi

    el

    camello como el logotipo del lenguaje, ya que aunque es feo, siempre trabaja fuerte an en

    condiciones complicadas.

    5. Se puede utilizar en varios entornos, como puede ser Windows 95, OS/2, Linux, entre

    muchos

    otros, sin realizar cambios de cdigo, siendo nicamente necesario la introduccin del

    interprete

    Perl correspondiente a cada sistema operativo .

    6. Tiene caractersticas que soportan una variedad de paradigmas de programacin, como la

    estructural, 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. No obstante, esta

    caracterstica es solo accesible en la versin 5.0.

    7. Tiene incorporado un poderoso sistema de procesamiento de texto y una enorme

    coleccin de

    mdulos disponibles.

    8. Ofrece una ayuda en lnea desde la consola de comandos. Por ejemplo, para obtener

    ayuda sobre la

  • funcin print, se debe de escribir en una ventana MSDOS: perldoc f print.

    9. Se ejecuta desde la lnea de comandos de una ventana del sistema operativo.

    10. Es un lenguaje case-sensitive, lo cual hace referencia a la propiedad de un texto para

    presentarse

    en maysculas o en minsculas.

    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 pragma strict). 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".

    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.

    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 sigil. 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".

    TIPOS DE DATOS

    Un aspecto importante de este lenguaje es que, por defecto, no es necesario declarar

    las variables

    previamente a su uso. Las variables se pueden empezar a usar directamente en las

    expresiones, lo cual

    ofrece mucha flexibilidad al momento de estar desarrollando el cdigo.

    Existen tres tipos bsicos de variables, los cuales se citan a continuacin.

  • 1. Escalar: empiezan por el carcter $. Un escalar puede almacenar nmeros, strings,

    referencias a

    otras variables y descriptores de ficheros. Algunos ejemplos de la declaracin de este tipo

    de datos

    son los siguientes: $a = 5; $b = "xxx"; $c = $a++;

    2. Arreglos: las variables array empiezan por el carcter @, y sirven para agrupar un

    conjunto de

    variables de tipo escalar. En este aspecto tambin se debe de nombrar la existencia de

    matrices.

    Algunos ejemplos son los siguientes: @a = (95, 7, 'fff' ); print @a;

    3. Hash: las variables tipo hash o array asociativo empiezan por el carcter %. Se trata de

    un tipo

    caracterstico de Perl, y consiste bsicamente en un array en el cual se accede a sus distintos

    elementos a travs de una clave en lugar de por un ndice. Los elementos se accesan por

    claves y

    no se permiten claves duplicadas. Para crear un elemento de un hash se requiere una lista de

    dos valores, siendo el primer elemento la clave y el segundo es el valor asociado a dicha

    clave, como

    se muestra en el siguiente ejemplo: %almacen = ( 'Peras', 5, 'Manzanas', 3); print

    $almacen{'Peras'};

    Tipos de datos [editar]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) o una

    referencia

    Una lista es una coleccin ordenada de escalares (una variable que almacena una lista se

    llama array)

    Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings se llaman

    claves y los escalares valores.

    Todas las variables estn precedidas por un sigil, 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. (Cualquier string 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 string vaco 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 sigil $ 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 sigil @ (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 sigil $#. 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; # guarda en @nombres_de_clientes todas las

    claves de %direcciones

    @direcciones_de_email = values %direcciones; # guarda en @direcciones_de_email todos

    los valores de %direcciones

    Estructuras de control [editar]Artculo principal: Estructuras de control, en ingls

    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 var ( lista ) {... }

    etiqueta foreach var ( lista ) {... } continue {... }

    if ( condicin ) {... }

  • if ( condicin ) {... } else {... }

    if ( condicin ) {... } elsif ( condicin ) {... } else {... }

    Cuando se controla a una sola declaracin, los modificadores de declaracin proporcionan

    una sintaxis ms ligera:

    declaracin if condicin;

    declaracin unless condicin;

    declaracin while condicin;

    declaracin until condicin;

    declaracin foreach 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.

    Subrutinas [editar]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; # devuelve 6 - ltimo elemento de la lista

    $x = array; # devuelve 3 - nmero de elementos de la lista

    @x = 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)

    IMPLEMENTACION

    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 y comprime 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

    bloque BEGIN.

    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 lxicos/parseador 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 auto-indentadores, 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.