Вы находитесь на странице: 1из 14

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

Вам также может понравиться