0% encontró este documento útil (0 votos)
94 vistas

Perl

Este documento presenta un tutorial sobre el lenguaje de programación Perl. Cubre temas como la introducción a Perl, su sintaxis, tipos de datos, operadores, estructuras de control, expresiones regulares, funciones, entrada/salida y variables predefinidas. El tutorial está destinado a proporcionar una guía completa sobre los conceptos y características básicas de Perl.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
94 vistas

Perl

Este documento presenta un tutorial sobre el lenguaje de programación Perl. Cubre temas como la introducción a Perl, su sintaxis, tipos de datos, operadores, estructuras de control, expresiones regulares, funciones, entrada/salida y variables predefinidas. El tutorial está destinado a proporcionar una guía completa sobre los conceptos y características básicas de Perl.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 40

Tutorial de Perl

1. Introduccin al Perl.

2. La sintaxis de Perl.

3. Tipos de datos.

4. Operadores.

5. Estructuras de control.

6. Expresiones regulares.

7. Creacin de funciones.

8. Entrada / salida.

9. Variables predefinidas.

Introduccin al Perl
1. Qu es Perl?
Perl (Practical Extraction and Report Languaje) es un lenguaje creado a principio de los noventa por
Larry Wall, el cual lo realiz casi como una obra altruista, por eso, su distribucin es gratuita.
Perl es un lenguaje pensado para la manipulacin de cadenas de caracteres, archivos y procesos. Esta
manipulacin se va simplificada por el importante nmero de operadores a disposicin del usuario. El
lenguaje Perl se percibe habitualmente como un lenguaje intermedio entre los shell scripts y la
programacin en C. En efecto, 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.
El lenguaje Perl no es precompilado, pero an as es ms rpido que la mayoria de lenguajes
interpretados, en especial que el Bourne Shell. Esto se debe a que los programas en Perl son analizados,
interpretados y compilados por el interprete perl antes de su ejecucin.
Estas caractersticas hacen que el mantenimiento y la depuracin de un programa en Perl sean mucho ms
sencilla que el mismo programa escrito en C.
Por todo esto, Perl es un lenguaje muy utilizado en los dos campos siguientes:
1. La administracin de sistemas operativos. Debido a 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, etc. Adems, aunque Perl naci en
un entorno Unix, hay versiones para casi todas las plataformas existentes.
2. La creacin de formularios en la Web. Es decir, se utilizan para la creacin de
scripts CGI (Common Gateway Interface). Estos scripts 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.

2. Acerca de las versiones de Perl.


Actualmente existen dos versiones altamente populares de Perl, la 4.3 y la 5.0, de hecho hay diferencias
importantes entre una versin y otra. Seguramente el lector se pregunta porque surge la duda entre usar
una versin vieja y una nueva, por regla general las nuevas versiones son mejores que las anteriores de
modo que las opacan en todo sentido, Perl no es la excepcin a esta regla, el nico factor que impide una
transicin inmediata es que no son 100% compatibles. La versin 5 de Perl es una reescritura total que ya
incluye un manejo de estructuras abstractas de datos mucho mas poderoso, incluso, soporta la orientacin
a objetos a su manera (lo que rompe en gran medida con la filosofa tradiconal 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 una funcin a otra por lo que la migracin es poco
practica.
En este tutorial seguiremos la filosofa tradicional de Perl y no nos adentraremos en la orientacin a
objetos.

La sintaxis de Perl
1. Un lenguaje interpretado.
Como sabemos Perl es un lenguaje interpretado, en consecuencia para ejecutar un script en Perl debemos
indicarle al sistema en ese mismo instante el interprete que vamos a utilizar para ejecutar dicha script en
Perl. Esto se puede realizar de dos formas:
1. Insertando en la primera lnea del archivo la instruccin:
#!/usr/local/bin/perl.
Esta sentencia indica al sistema operativo que lo que sigue es un script de Perl y que
perl es el programa con el que debe ejecutarse. Dicho programa est en /usr/local/bin.
Por tanto la secuencia !# es reconocida por Unix no por Perl.
2. Especificando el intrprete desde la lnea de comando: perl script.pl.
Vemos como directamente se ejecuta el interprete de Perl pasando como primer
paramtro el script a ejecutar. En el caso de haber ms parmetros, stos se tomarn
como parmetros del programa.
As slo nos queda saber que para ejecutar un script, el fichero que lo contiene en este caso script.pl debe
tener permiso de ejecucin al menos slo desde el punto de vista del usuario. Para saber los permisos que
contiene un fichero en el sistema operativo Unix basta simplemente con teclear el siguiente comando: ls
-l.
Si cuando tecleamos esto y vemos que no tiene permiso de ejecucin, utilizaremos el siguiente comando
para darle dicho permiso: chmod 700 script.pl.
De esta manera, slo podremos leer, escribir y ejecutar el archivo nosotros como usuarios del mismo.
2. El intrprete de Perl.
Como ya hemos dicho en el captulo anterior, una de las maneras de ejecutar un script de Perl era
ejecutando dicho script como un parmetro de un interprete de Perl determinado. Pues bien, dicho
intrprete posee ciertas opciones que nos proporcionan o bien informacin sobre el mismo, o bien ciertas
facilidades a la hora de ejecutar los script como se podr ver a continuacin.
?? perl -v : Muestra la versin del intrprete de Perl que estamos utilizando.
?? perl -V : Muestra informacin sobre la configuracin del intrprete de perl.
?? perl -e expresin : Ejecuta la expresin como si sta fuera un programa de una lnea. Por
ejemplo: perl -e "print 'hola a todos\n';"
?? perl -ne expresin : Ejecuta la expresin como si est fuera un bucle repetitivo. He aqu
un ejemplo: perl -ne "print if /M+/;" usuarios.txt . Este ejemplo extrae
todos los usuarios cuyo nombre empieze por la letra M.
?? perl -d script : Ejecuta el script bajo el depurador.
?? perl -w script : Da avisos sobre las contrucciones con errores.
?? perl -pe expresin : Ejecuta la expresin como si est fuera un bucle repetitivo y
adems imprime cada lnea. He aqu un ejemplo: perl -pe "print if /M+/;"
usuarios.txt . Observar diferencia con la opcin -ne. La diferencia es que mientras la
primera versin slo imprima los nombres que empezaban por M, la segunda por su parte
imprima todos los nombre una vez salvo los que empiezan por M que los imprime dos veces.
?? perl -x script : Empieza a interpretar el fichero que contiene el script cuando encuentra
la referencia al intrprete, por ejemplo: #!/usr/bin/perl.
?? perl -i archivo : Permite editar archivos. Por ejemplo, si ejecutamos lo siguiente sobre
la lnea de comandos: perl -p -i -e "s/\$seg/\$segundos/g;" tiempo.pl.
Esta orden cambiar el nombre de la variable $seg por $segundos en el script contenido en
el fichero tiempo.pl.

3. El primer programa en Perl.


Un script en Perl es una sucesin de instrucciones. stas se delimitan por punto y coma (;). Los
comentarios en los scripts deben ir precedidos por el smbolo #. Los caracteres que siguen a este smbolo
y que est contenidos en la misma lnea se consideran comentarios y se ignoran.
El siguiente script muestra la cadena de caracteres "Hola, mundo!". Este script se llamar hola.pl y
contendr las siguientes lneas.
#!/usr/local/bin/perl
print "Hola, mundo!";
Una vez que hayamos verificado los permisos de dicho script estaremos listos para ejecutarlo
simplemente tecleando en la lnea de comandos: hola.pl.
Por ltimo hacer notar que lo de la extensin .pl es simplemente una formalidad y que nos es
absolutamente necesario que el fichero que contenga nuestro script lleve dicha notacin.

Los tipos de datos


1. Los tipos bsicos de datos b sicos.
Perl permite representar los tipos de datos bsicos como son los reales, los enteros, las cadenas de
caracteres y el tipo booleano.
1.1. Los tipos numricos (reales y enteros).
Los valores numricos espresados literalmente se presentan en forma de valores reales
codificados en doble precisin. Este formato interno se utiliza para todas las
operaciones aritmticas. Por ejemp lo:
$x
$y
$n
$i

=
=
=
=

0.897;
6.23e-24;
567;
-234;

#
#
#
#

un
un
un
un

real
real
entero
entero

Nota: El que todas las variables contengan un $ significan que


representan un escalar. Esto lo veremos en el siguiente apartado.
Los valores enteros no pueden empezar por cero porque esto permite especificar un
entero mediante su codificacin octal o hexadecimal. El cdigo octal se antecede con en
cero 0; el cdigo hexadecimal se antecede con un 0x o 0X. Por ejemplo:
$x = 0377;
$y = 0xff;

# equivale a 255
# equivale a 255

1.2. Las cadenas de caracteres.


Las cadenas de caracteres se especifican literalmente por medio de un sucesin de
caracteres delimitada por comillas ("..") o apstrofes ('..'). Estas dos representaciones se
distinguen por la interpretacin hecha por Perl de las cadenas de caracteres. Cuando van

delimitadas por comillas (".."), toda variable referenciada en el interior de la cadena se


evala y se reemplaza por su valor. Por ejemplo, las instruciones siguientes:
$wld = "mundo";
$str = "Hola $wld!";
asignan al escalar la cadena de caracteres "Hola mundo!". Por el contrario, las cadenas
de caracteres delimitadas por apstrofes se dejan intactas. Por ejemplo:
$str = 'Hola $wld!';
asigna al escalar $str la cadena de caracteres "Hola $wld!".
Existe una tercera sintaxis que permite delimitar una cadena de caracteres. Se utiliza
cuando la cadena de caracteres contiene varias lneas y/o comillas o apstrofes. Su
sintaxis es la siguiente:
$str = <<etiqueta;
....
etiqueta
donde la etiqueta es una cadena de caracteres cualquiera. El fin de la cadena se
determina por la nueva lnea que contiene nicamente el identificador. ste no debe ir
precedido por un espacio ni marca de tabulacin. Por ejemplo:
$msg = <<SALUDO;
hola,
buenos das,
adios,
SALUDO
1.3. El tipo booleano.
El tipo booleano existe, al igual que en C, de modo implcito, es decir, un nmero es
falso si es igual a cero y verdadero en cualquier otro caso. Como el cero est asociado a
la ristra vaca (""), sta tambin equivale al valor falso.
2. Las representaciones de datos.
El lenguaje Perl posee tres tipos de representaciones de datos:
?? los escalares.
?? los arrays.
?? los arrays de indexacin literal o listas asociadas.
Estas tres representaciones permiten asociar a cada variable utilizada un tipo. Por otra parte, las variables
Perl no tienen que declararse antes de su uso. Se asignan de manera dinmica y se les asigna un valor
predeterminado en funcin del contexto.
2.1. Los escalares.
El escalar representa el tipo bsico en Perl. Permite representar enteros, reales y
cadenas de caracteres. Las variables de tipo escalar van precedidas por el smbolo $. A
continuacin veremos algunos ejemplos:

$real = 4.53;
$entero = -45;
$ristra = "Hola";
Las variables en Perl se asignan de manera dinmica y se les asigna un valor
predeterminado en funcin del contexto. En un contexto numrico el valor
predeterminado es 0, mientras que en un contexto de cadena de caracteres el valor
predeterminado es la cadena vaca "".
Como ya hemos dicho, cuando una cadena de caracteres se delimita por comillas, el
contenido de esta cadena es analizado por Perl para el reemplazo eventual por su valor
de las variables escalares identificadas por el smbolo $. Este anlisis se denomina
interopolacin de variables y puede evitarse poniendo delante del smbolo $ una barra
oblicua inversa \ o delimitando la cadena de caracteres con apstrofes. He aqu un
ejemplo:
$adr =
$msg =
"\n";
$msg =
$msg =
$msg =

"www";
"El servidor web ${adr}.ulpgc.es"; print $msg,
"El servidor web $adr.ulpgc.es"; print $msg, "\n";
"El servidor web \$adr.ulpgc.es"; print $msg, "\n";
'El servidor web $adr.ulpgc.es'; print $msg, "\n";

Observe la contruccin ${...} para referenciar el nombre de una variable en una cadena
de caracteres. Si lo hubieramos omitido, el ejemplo anterior habra hecho referencia a la
variable $adr.ulpgc.es no definida.
El tipo y el valor de las variables en Perl se determina a partir del contexto. As, una
cadena de caracteres conteniendo un valor numrico ser convertida en variable
numrica en un contexto numrico. Consideremos el cdigo siguiente:
$x = 4.1;
# un real
$y = "11";
# una cadena de
caracteres
$z = $x + $y;
# adicin de dos valores
numricos
$t = $x . $y;
# concatenacin de dos
cadenas
print $z, "\n", "$t \n";
Al final del cdigo la variable $z tiene el valor 15.1. Por otro lado, la variable $t
contiene el valor "4.111". Por lo tanto en Perl no es necesario realizar una declaracin
de tipos, ni es necesario el operador cast, ni tampoco es necesario dar formato a los
valores a la hora de imprimirlos como ocurra en C. Esta interpolacin se produce a
menudo en unas lneas de cdigo tales como las siguientes:
$year = 35;
print "Tengo $year aos";
El resultado de estas lneas de cdigo es: "Tengo 35 aos"; el contenido de la variable
year se ha convertido en una cadena de caracteres.
2.2. Los arrays.
Un array es una lista de datos de tipo escalar. Cada elemento de la lista es una variable
escalar a la que se le asocia un valor. Las variables de tipo array se identifican por el
prefijo arroba @. Por ejemplo:

@numeros = (2, 1, 667, 23, 2.2, 5, 6);


@letras = ("perro", "gato", "len");
@mezcla = ("hola", 23, "adios", 31.234);
Tambin se permite definir los elementos de un array a partir de sus valores extremos
como se muestra a continuacin:
@alfabeto = (a..z);
Los elementos de un array se referencian mediante ndices. El primer elemento se
referencia por el ndice 0. Por ejemplo:
$numero[4];
$letras[2];
$mezcla[0];

# vale 2.2
# vale "len"
# vale "hola"

Tambin se puede acceder a un array mediante el operador que define una horquilla de
ndices. Por ejemplo:
@num1 = @numeros[1..3];
23)
@str = @letras[0,2];
"len")
($ristra, $num) = @mezcla;
"hola", $num = 23

# @num1 = (1, 667,


# @str = ("perro",
# $ristra =

Esta ltima instruccin vemos que permite asignar los dos primeros valores del array
@mezcla a las variables escalares $ristra y $num. Por otro lado, el acceso a un array
fuera de rango devuelve un valor indefinido 0 o "" segn el contexto.
Por ltimo, si vemos las siguientes lneas de cdigo:
@a=(1,2,3);
@b=(5,6,7);
@c=(@a,4,@b,8);
Estas expresiones generan tres arrays, (1,2,3), (5,6,7) y (1,2,3,4,5,6,7,8), y no, como
podra pensarse un array de arrays, cuando incluimos un array dentro de otro, Perl
"aplana" el array insertado uno a uno todos sus elementos en la posicin indicada del
array que ha de contenerlos, para hacer array de arrays deberemos usar referencias a
estos. Como veremos en el apartado 4 de este captulo.
2.3. Las listas asociativas (arrays de indexacin literal).
Una lista asociativa est indexada por cadenas en lugar de por nmeros. Se utiliza %
para definir el tipo de lista asociativa y un elemento est indexado por el anterior
formando ambos parejas del tipo (clave, valor).
%cuota = ("root", 1000, "pat", 256, "fiona",
4000);
En este caso, para acceder a cualquiera de los elementos de %cuota debemos conocer
su clave. Por ejemplo:
$id = $cuota{"pat"};

# $id = 256

Esta lista puede completarse aadiendo nuevos valores y asociando a cada clave el
valor correspondiente. Por ejemplo:
$cuota{"dave"} = 250;
donde la clave es "dave" y el valor asociado es 250.
3. Los identificadores de las variables.
En cuanto a las ristras de caracteres que representan a nuestras variables decir que los caracteres
permitidos son las letras, dgitos y el carcter underscore (_). Las letras maysculas y minsculas son
diferenciadas en los nombres de variables. Los nombre de las variables siempre deben comenzar por una
letra. Se recomienda que los nombre de las variables estn en consonancia con lo que ellas representan,
sin embargo estos tampoco deben ser demasiado largos.
4. Las referencias.
Las referencias son el equivalente a los punteros en C. Es un tipo de datos que permite referenciar datos
contenidos en otra entidad. No forman una nueva representacin de datos, ya que stos son tratados como
un tipo ms de escalar.
La definicin de referemcia se usa mediante el operador de referencia backslash ("\"). No existe un
operador de desrreferencia.
A diferencia de C, Perl no deja "huella" de las referencias en memoria sino que tiene un mecanismo de
"papelera de reciclaje" que consis te en un registro que posee las diversas referencias a cada elemento en
memoria y las destruye cuando descubre que nadie hace referencia a l.
4.1. Creacin de referencias.
Podemos crear una referencia usando un operador de referenciacin en una variable o
un valor. En el caso de la variable es crear un medio alternativo de acceder al valor de
la variable.
$rescalar = \$escalar;
$rarreglo = \@arreglo;
$rhash = \%hash;
Por otro lado, cuando usamos el operador de referenciacin con un valor, creamos
objetos annimos que slo pueden ser accedidos por medio de la referencia.
$rescalar=\"hola"; #referencia a la cadena
annima "hola"
$rarray=[1,2,3];
#referencia al array
annimo (1,2,3)
$rlista={"llave1" => "dato1","llave2" =>
"dato2"};
Nota: En esta representacin usamos el operador "=>" para la
representacin de listas asociativas annimas.
De esta manera se pueden construir estructuras de datos ms complejas como se ve en
el siguiente ejemplo:
%rNumeros = {"arabes" => [1,2,3], "romanos" =>
[I, V, X]}

El ejemplo que acabamos de ver forma una lista asociativa annima donde las claves
son cadenas de caracteres y los valores son referencia a arrays.
4.2. Uso de referencias.
A continuacin se dar la forma de acceder a las referencias y modifiar su valor. Como
veremos en el ejemplo que viene a continuacin para acceder al valor referenciado se
usa el operador $ por duplicado.
$nombre="entero";
$entero=5;
$rentero=\$entero;
$$nombre=6;
$$rentero=7;

Como se puede ver en este ejemplo cambia el valor de $entero de 5 a 6 y despus de 6 a


7. A continuacun veremos el uso de las referencias a arrays y listas asociativas.
$rarray=[1,2,3,4]
#crea arreglo annimo
(1,2,3,4)
$$rarray[2]="tres";
#modifica el array annimo a (1,2,"tres",4)
@$rarray=();
#limpia el arreglo annimo
Como forma de abreviar la referencia a listas asociativas o arrays se aadi en operador
"->". A continuacin veremos un ejemplo de uso del mismo.
$rarray->[2]="hola";
# Coloca "hola" como 3 elemento del array
referenciado
$rlista->["clave1"]="valor1";
# Coloca el par ("clave1" => "valor1")
Se pueden realizar referencias a referencias y arreglos a referencias de forma que los
arryas multidimensionales se pueden hacer con la misma facilidad que en C. Ejemplo:
$array3d->[0]->[0]->[0]=1;
# Forma abreviada:
$array3d[0][0][0]=1;
# Tambin se puede usar
$array3d->[0][0][0]=1;

Los operadores en Perl


En Perl distinguiremos tres tipos de operadores dependiendo de la representacin de datos sobre la que
queremos actuar. De este manera habr tres tipos de operadores: los operadores asociados a los escalares,
los asociados a los arrays y por ltimo, los vinculados a las listas asociativas.
1. Los operadores asociados a escalares.
Los operadores definidos en Perl tienen todos los operadores estndar (de tipo C) a los que aaden
operadores especficos para la manipulacin de cadenas de caracteres. Como veremos ms adelante la
precedencia de estos operadores sigue el mismo criterio que en el lenguaje C.
1.1. Operadores aritmticos.
Perl suministra los siguientes operadores aritmticos.

Entre los operadores artimticos tambin distinguimos los de autoincremento (++) y


autodecremento (--). Estos operadores son unarios y se realiza el incremento o
decremento de la variable que se le aplica. Adems de la accin de modificar la variable
devuelven el valor de la variable.
El operador de incremento o decremento puede ir delante o detrs de la variable,
teniendo diferente significado. Si el operador ++ se situa despus de la variable se
denomina postincremento, haciendo que primero se tome el valor y despus se
incremente la variable. Ejemplo:
$n = $k++;
# el valor de k se asigna a n y despus se
incrementa k
Por otro lado, si el operador ++ se sita despus de la variable se denomina
preincremento y hace que primero se incremente la variable y despus se tome el valor.
Ejemplo:
$n = ++$k;
# primero se incrementa k y luego se asigna a
n
Finalmente, decir que con el operador de decremento se acta de forma anloga
obteniendo as el predecremento y el postdecremento.
1.2. Operadores relacionales.

Perl distingue dos tipos de operadores relacionales: los operadores especficos a valores
numricos y los propios de las cadenas de caracteres. Estos operadores se resumen en
la siguiente tabla:

A parte de los operadores que hay en la tabla cabe distinguir otros operadores
nicamente caractersticos del lenguaje Perl.
?? cmp. Este operador es utilizado para comparar caracteres, de
manera que, retorna 0 si los caracteres comparados son
iguales, 1 si la cadena de la derecha se encuentra al
comienzo de la de la izquierda, y -1 en el caso contrario.
Para aclarar el funcionamiento de este operador he aqu un
ejemplo:
'one' cmp 'one'
# devuelve 0
'one dog ' cmp 'one'
# devuelve 1
'dog one' cmp 'one'
# devuelve -1
'two' cmp 'one'
# devuelve -1
?? <=>. Este operador se utiliza para comparar valores
numricos, retornando 0 cuando son iguales, 1 cuando el
termino de la derecha es menor que el de la izquierda y -1 en
el caso contrario.
?? =~. Este operador es usado en las expresiones regulares para
indicar la presencia de un patrn de compracin dentro de
una variable que contiene una cadena de caracteres. Por
ejemplo:
if ($ristra =~ /str/)
{
print $ristra;
}
else {
print "No se
encuentra el patrn";
}
# verifica si 'str' se
est en $ristra
?? !~.Meditante este operador se verifica la no existencia del
patrn de bsqueda en una cadena. He aqu un ejemplo:
if ($ristra !~ /str/)
{

print "No se
encuentra el patrn";
}
else {
print $ristra;
}
1.3. Operadores lgicos.
Los operadores lgicos estn relacionados con los relacionales ya que normalmente los
operadores que se usan son resultado de expresiones relacionales.
Los valores resultantes son cero o ristra vaca ("") y distinto de cero o ristra vaca para
falso o verdadero respectivamente.

He aqu un ejemplo:
if (($alfa>4) && ($beta<3)) {
print $alfa * $beta;
# Slo entra si se cumplen ambas
expresiones.
}
if (($pal1 eq "N") || ($pal1 eq "n") {
print "La operacin no se efectua";
&salida();
# Entra si se cumple alguna de las dos
expresiones
}
if (!($num < 5)) {
print "$num es mayor que 5";
# Entra si la expresin no se cumple
}
1.4. Operador de seleccin.
Es un operador triario que requiere una condicin y dos expresiones. Se utiliza para
ejecutar una expresin u otra dependiendo de la condicin. Su formato es el siguiente:
Condicin? Exp1: Exp2
Si se cumple la condicin se evala y devuelve la expresin Exp1 si no la Exp2. Por
ejemplo:
i = (x<y? 6:k+1); # si x<y entonces i=6, si no
i=k+1
1.5. Operadores de asignacin.
Una asignacin tambin es un operador que devuelve la variable modificada. El la
siguiente tabla veremos los operadores de asignacin contenidos en Perl que como se
podr observar son muy parecidos a los del lenguaje C.

A parte de estos operadores Perl posee el operador =~ que tambin es un operador de


asignacin, ya que este operador se utiliza dentro de una expresin regular de
sustitucin para sustituir un patrn de comparacin por otra cadena. Ejemplo:
$var =~ s/uno/dos/;
# reemplaza la primera ocurrecia "uno" por
"dos" en
# la cadena dada
1.6. Operadores a nivel de bits.
Al igual que C, Perl toma como uno de sus objetivos no alejarse de la mquina, para
ello posee esta serie de operadores a nivel de bits.

1.7. El operador ",".


El opearador "," evala varias expresiones donde la sintaxis solamante permite una,
siendo el valor resultante la ltima expresin evaluada. La evaluacin se realiza de
izquierda a derecha. En Perl 5 tambin se usa el operador => para lo mismo que la
coma ",". Ejemplo:
i = (f(3), j+5, k*8, 4/2); # i = 4/2
1.8. Smbolos de puntuacin.

Adems en Perl tenomos los smbolos de puntuacin que a diferencia de otros lenguajes
son considerados operadores en Perl. Bsicamente tenemos cuatro smbolos que nos
permiten agrupar otros smbolos para darles una interpretacin especial.
?? ' '. Especifica valores literales. No hace sustituciones.
Ejemplo:
$fecha = "14 de Julio";
print 'hoy es $fecha'; # imprime
"hoy es $fecha"
?? " ". Especifica valores literales. Realiza sustituciones.
Ejemplo:
$fecha = "14 de Julio";
print "hoy es $fecha";
# imprime "hoy es 14 de
Julio"
?? ` `. Ejecuta el comando contenido haciendo las sustituciones
indicadas. Igual que muchos Shells de Unix. Por Ejemplo:
print `date`; # ejecuta comando
date
?? / /. Delimita expresiones regulares. Ejemplo:
if ($var =~/exe/) {
print $var;
}
# Se imprime $var si contiene el
patrn exe
1.9. Precedencia de operadores.
Normalmente las expresiones en Perl se evalan de izquierda a derecha, aunque hay
algunas excepciones que es necesario tener en cuenta. No se evalan de izquierda a
derecha los operadores de asignacin y el operador de seleccin. Cuando una expresin
tiene diversas posibilidades se aplica el orden de precedencia para establecer el claculo
a realizar. La precedencia de los operadoes se mostrar en la siguiente tabla, aunque se
recomienda emplear parntesis para que nunca haya duda en el orden de evaluacin.

1.10. Funciones predefinidas para el tratamiento de cadenas de caracteres.


Perl posee una serie de funciones predefinidas que nos facilitan el tratamiento de
cadenas de caracteres. Si ellas, realizar operaciones con este tipo de datos sera casi
imposible. A continuacin nombraremos las funciones bsicas para efectuar dicho
tratamiento:
?? length(cadena de caracteres). Esta funcin nos permite conocer la longitud
de una cadena de caracteres. Por ejemplo:
$ristra = "hola";
lon = length($ristra); # lon = 2
?? chop(cadena de caracteres). Elimina el ltimo carcter de la ristra y retorna
dicho carcter. Esta funcin se suele usar para eliminar el carcter de nueva
lnea que contienen las ristras que se introducen por teclado o se leen de un
fichero. Ejemplo:
print "Teclea algo y pulsa
enter:\n";
$input = <STDIN>; # $input
contiene el "enter"
chop($input);
# $input no lo
contiene
?? index(ristra, subristra, [posicin]). Esta funcin retorna la posicin de la
primera ocurrencia de la subristra en la ristra indicada. El parmetro posicin
indica el nmero de caracteres desde el inicio que se deben ignorar en la
bsqueda. Si se omite este parmetro se considera que no se desea ignorar
ningn carcter, es decir, se considera posicin igual a 0. Si no se encuentra la
subristra la funcin devuelve la posicin desde la que comienza a buscar -1,
esto es, el parmetro posicin menos 1. Ejemplo:
$ristra = "El automvil";
$subristra = "auto";
$pos = index($ristra,
$subristra);
# $pos = 4
$pos = index($ristra, $subristra,
6); # $pos = 5

?? rindex(ristra, subristra, [posicin]). Esta posicin trabaja igual que index


salvo que retorna de la ltima ocurrencia de la subristra en la ristra. Posicin es
el nmero de caracteres desde el inicio que se ignor en la bsqueda. Si no se
encuentra posicin, el valor retornado es posicin menos 1. Ejemplo:
$ristra = "carro y motocarro";
$subristra = "carro";
$pos = rindex($ristra,
$subristra); # $pos = 13;
?? substr(ristra, desplazamiento, [longitud]). Esta funcin extrae una subristra
de la ristra dada, desde la posicin indicada por desplazamiento hasta el
nmero de caracteres indicado por longitud. Si el parmetro longitud se omite
se tomar la subristra que va desde el parmetro desplazamiento hasta el final
de la ristra. Considerar que el primer carcter de una ristra es el que esta en la
posicin cero. Ejemplo:
$ristra = "Universidad de Las
Palmas de G.C.";
$subristra =
substr($ristra,15,10);
# $subristra = "Las Palmas"
$subristra = substr($ristra,15);
# $subristra = "Las Palmas de
G.C."
?? pack("tipos a convertir", valores a convertir). La funcin pack es un
convertidor de tipos que ofrece en su primer parmetro varias opciones de
conversin para convertir el tipo de la lista de valores que se dan en el segundo
parmetro a caracter ASCII. A continuacin se muestran las tipos de
conversin ms usados:

Para enteder mejor el funcionamiento de esta funcin veremos a


continuacin algunos ejemplos:
$ristra =
68);
# $ristra
$ristra =
68);
# $ristra
$ristra =

pack("cccc",65, 66, 67,


= "ABCD"
pack("c4", 65, 66, 67,
= "ABCD"
pack("ccxxcc", 65, 66,

67, 68);
# $ristra = "AB\0\0CD"
Esta funcin, junto con la funcin hex(valorBase16) que pasa de
hexadecimal a entero, son muy tiles para convertir datos procedentes
de formularios Web, ya que, en este caso, todos los caracteres de
puntacin, de control, llegan en formato hexadecimal al servidor y
necesitan convertirse en formato ASCII. Esto se hara introduciendo
en el programa de conversin y tratamiento de formulario la siguiente
lnea:
$StringForm =~
s/\%(..)/pack("c",hex($1))/ge;
2. Los operadores asociados a arrays.
2.1. El operador $#.
El operador $# permite delimitar el ltimo ndice vlido de un array. Este valor
norepresenta el tamao del array, porque esto depende tambin del ndice de base (es
decir, el primer elemento del array). Esto se define por la variable $[ cuyo valor
predeterminado es 0. Mediante estos dos elementos se puede delimitar el tamao del
array. Por ejemplo, si @A es un array, el cdigo siguiente permite determinar su
tamao:
$n = $#A - $[ + 1;
print "La matriz tiene $n elementos\n";
Los arrays se asignan de manera dinmica y su tamao se modifica en funcin de la
asignacin de nuevos elementos. Tambin es posible asignar el tamao de memoria
necesario antes de utilizar el array. Esto se hace asignado un valor requerido al operador
$#. Por ejemplo:
$mes = 11; # el array tiene 12 elemento de 0 a
11
2.2. Los operadores push y pop.
Los operadores push y pop permiten respectivamente insertar y extraer el ltimo
elemento de un array. Por ejemplo:
push(@list, $val);
# equivale @list =
(@list, $val)
$oldval = pop(@list);
# extrae el ltimo
elemento
@list = (1,2,3);
@five = push(@list, (4,5)); # @five =
(1,2,3,4,5)
$num = pop(@list);
# $num = 5
2.3. Los operadores shift y unshift.
Los operadores shift y unshift permiten respectivamente suprimir e insertar el primer
elemento de un array. Por ejemplo:
unshift(@list, $val); # equivale a @list =
($val, @list)
unshift(@list, $a, $b, $c);

# equivale a @list = ($a, $b,


$c, @list)
@five = (3,4,5);
unshift(@five,1,2); # @five = (1,2,3,4,5)
$x = shift(@five); # $x=1, @five=(2,3,4,5)
2.4. Los operadores reverse y sort.
El operador reverse invierte los valores del array mientras que el operador sort los
ordena en sentido creciente. Por ejemplo:
@five = (2,3,4,5,1);
sort(@five);
reverse(@five);

# @five = (1,2,3,4,5)
# @five = (5,4,3,2,1)

2.5. Los operadores split y join.


Los operadores split y join permiten transformar una cadena en una lista de caracteres.
Por ejemplo, cuando un usuario enva un formulario a un servidor WWW, su contenido
se transmite al concatenar pares nombre-valor separados por el smbolo &. Para
acceder a la informacin transmitida, es necesario descomponer esta cadena de
caracteres.
La funcin split admite tres argumentos, aunque de stos, el tercero es opcional. El
primero de estos argumentos es una expresin regular y el segundo es una cadena de
caracteres. La expresin regular define el modelo que deber descomponer la cadena de
caracteres. La sintaxis es la siguiente:
@lista = split(/expresin/, cadena)
donde se representa una expresin regular cualquiera. Por ejemplo:
$datos = "x=3&dbase=Lycos";
@lista = split(/&/, $datos);
foreach $par (@lista) {
($nombre, $valor) = split(/=/, $par);
}
Por ltimo, el tercer parmetro consiste en un campo entero que limita el nmero de
campos que divide la lista de caracteres, despreciando los sobrantes, por ejemplo si en
l cdigo que acabamos de ver no queremos el campo representado en la variable valor,
realizaremos los siguientes cambios.
$datos = "x=3&dbase=Lycos";
@lista = split(/&/, $datos);
foreach $par (@lista) {
$nombre = split(/=/, $par,1);
}
El operador join realiza la tarea inversa. As, a partir de un serparador de un lista de
valores, concatena los elementos de la lista y la cadena de caracteres que representa el
separador. La sintaxis del operador join es la siguiente:
$cadena = join(separador, @lista)
donde el separador representa una cadena de caracteres cualesquiera. Por ejemplo:

@lista = ("x=3", "dbase=Lycos");


$msg = join("&", @lista);
#
x=3&dbase="Lycos"
3. Los operadores asociados a listas asociadas.
3.1. El operador keys.
El operador keys proporciona la lista de claves o ndice de una lista asociativa. Por
ejemplo:
%cuotas = ("root", 10000, "pat", 256);
@list = keys(%cuotas); # @list = ("root",
"pat")
3.2. El operador values.
El operador values devuelve los valores de una lista asociativa. Por ejemplo:
%cuotas = ("root", 10000, "pat", 256);
@list = values(%cuotas); # @list = (10000,
256)
3.3. El operador each.
Tambin se puede acceder a una lista asociativa por pares clave-valor, permitiendo el
operador each recorrerla iterativamente. El ejemplo siguiente ilustra un acceso a los
pares clave-valor una lista asociativa.
%cuotas = ("root", 10000, "pat", 256);
while (($clave, $valor)=each(%cuotas)) {
print "Login: $clave, Cuota: $valor\n";
}
3.4. El operador delete.
Para suprimer elementos de una lista asociada se usa el operador delete. Este operador
permite suprimir un par clave-valor de una lista asociativa. Por ejemplo:
%cuotas = ("root", 10000, "pat", 256);
delete $cuota{"pat"}; #%cuotas = ("root",
10000)

Estructuras de control
El desarrollo de un programa viene determinado por el orden en que aparecen las instrucciones. El
lenguaje Perl posee controlar un conjunto de instrucciones que permiten controlar el desarrollo de un
programa. Estas instrucciones se denominan estructuras de control porque permiten ejecutar un
conjunto de instrucciones cuando se verifica una condicin o ejecutar iterativamente un bloque de
instrucciones mientras una expresin sea vlida.
1. La instruccin if.
Es muy parecida a la utilizada en C. La sintaxis de la instruccin if es la siguiente:
if (expresin) {
instruccin o bloque de intrucciones 1;
}
[else {
instruccin o bloque de intrucciones 2;
} ]
El programa evala la expresin. Cuando esta expresin resulta verdadera, se ejecuta la instruccin o el
bloque de instrucciones 1. Por contra, cuando es falsa de ejecuta la instruccin o bloque de instrucciones
2. Esta ltima parte es opcional. Para representar una estructura de varios casos se utilizar la sintaxis
siguiente:
if (expresin 1) {
instruccin o bloque de instrucciones 1;
}
elsif (expresin 2) {
instruccin o bloque de instrucciones 2;
}
elsif (expresin 3) {
instruccin o bloque de instrucciones 3;
}
else {
intruccin o bloque de instrucciones 4;
}
A continuacin veremos un ejemplo sencillo del uso de esta estructura para comprender mejor su
funcionamiento:
print "Introduzca un nmero del cero al dos y pulse
Enter:\n";
$var = <STDIN>;
if ($var == 0) {
print "Esta es la opcin 0\n";
}
elsif ($var == 1) {
print "Esta es la opcin 1\n";
}
elsif ($var == 2) {
print "Esta es la opcin 2\n";
}
else {
print "No existe al opcin tecleada\n";
}
2. La instruccin while.

La instruccin while ejecuta iterativamente un bloque de instrucciones mientras una expresin sea vlida,
evaluando la comprobacin en cada iteracin. Cuando la prueba es vlida, se ejecuta la instruccin o el
bloque de instrucciones delimitado por las llaves. La sintaxis de esta instruccin es:
while (expresin) {
instruccin o bloque de instrucciones;
}
He aqu un sencillo ejemplo de manejo de esta estructura:
print "Teclea \"x\" para salir:\n";
$ristra = "";
while ($ristra ne "x") {
$ristra = <STDIN> ;
chop($ristra);
print "Has escrito $ristra\n";
}
print "Salida.\n"
3. La instruccin for.
La instruccin for permite ejecutar iterativamente un conjunto de instrucciones. La sintaxis de la
instruccin for es:
for (inicial_exp; test_exp; incremento_exp) {
instruccin o bloque de intrucciones;
}
donde:
?? inicial_exp es la instruccin que inicializa el bucle. Consiste generalmente en la asignacin de
un valor a una variable que permite controlar el nmero de iteraciones.
?? test_exp es la expresin evaluada en cada iteracin. Cuando esta expresin es verdadera, el
bloque de instrucciones se ejecuta.
?? incremento_exp es la expresin que permite la actualizacin de la variable que controla el
nmero de iteraciones.
A continuacin veremos un ejemplo de esta estructura para iniciarnos en su manejo:
print "10 Iteraciones\n";
for ($i=0; $i<10; $i++) {
print "Interacin nmero $i\n";
}
4. La instruccin foreach.
La instruccin foreach es similar a la funcin del mismo nombre de los Shells de Unix. Asocia
iterativamente a una variable cada elemento de la lista. Esta sucesin de valores sirve para parametrizar la
ejecucin del bloque de instruccin. La sintaxis de la instruccin foreach es:
foreach $variable (@lista) {
instruccin o bloque de instrucciones;
}
Las intrucciones for y foreach son equivalentes. Sin embargo, la utilizacin de una de estas instrucciones
se justifica generalmente por el contexto. El ejemplo siguiente lo ilustra:

@lista = ("elem1", "elem2", "elem3", "elem4");


for ($i = 0; $i<= $#lista; $i++) {
print $lista[$i], "\n";
}
Este ejemplo no utiliza las caractersticas de los arrays en Perl. La utilizacin de la instruccin foreach
permitir recorrer la lista de forma ms elegante. El ejemplo siguiente lo ilustra:
@lista = ("elem1", "elem2", "elem3", "elem4");
foreach $elem_actual (@lista) {
print $elem_actual, "\n";
}
5. La instruccin goto.
La instruccin goto label permite cambiar el recorrido lineal de las lneas de cdigo prosiguiendo la
ejecucin del programa en la lnea de etiqueta label. La etiqueta se define colocando al final del
identificador dos puntos (:). En el siguiente ejemplo se podr ver mejor la contruccin del goto.
if ($expr ne $expr_correcta) {
goto error;
}
...
error: print "expresin incorrecta";
La utilizacin del goto en Perl no es recomendable. Por que le quita al cdigo legibilidad y aumenta la
posibilidad de errores.
6. La instruccin last.
La instruccin last interrumpe la ejecucin del bucle actual y se ejecuta la instruccin que sigue al bloque.
El ejemplo siguiente permite interrumpir el bucle while cuando la variable i toma el valor 3.
$i = 0;
while($i < 6) {
if($i == 3) {
last;
}
$i++;
}
print "el valor de \$i es $i";
Cuando la instruccin tiene como argumento una etiqueta, la ejecucin prosigue en la lnea indicada por
la etiqueta.
7. La instruccin next.
La instruccin next es idntica a la instruccin continue en C. Interrumpe la ejecucin del bloque de
instruccin actual y prosigue la ejecucin en la iteracin siguente. Esta instruccin no interrumpe
completamente la ejecucin del bucle; la exp resin que controla el bucle se evala. Si el resultado de la
expresin es vlido, el bucle se ejecuta de nuevo.
Cuando una instruccin tiene como argumento una etiqueta, la instruccin prosigue en la lnea
identificada por la etiqueta y no al principio del bloque.
Seguidamente veremos un ejemplo de dicha instruccin:

print "Teclea \"x\" para salir:\n";


print "Si se pulsa la tecla \"s\" no se imprime:\n";
$ristra = "";
while ($ristra ne "x") {
$ristra = ; chop($ristra);
if ($ristra eq "s") {
next;
}
print "Has escrito $ristra\n";
}
print "Salida.\n"
8. La instruccin until.
La instruccin until al igual que la instruccin while permite ejecutar un conjunto de instrucciones un
nmero repetido de veces. Pero al contrario que la la instruccin while, la intruccin until ejecuta dicho
bloque de instrucciones mientras no se verifique la comprobacin. La sintaxis es:
until (expresin) {
instruccin o bloque de instrucciones;
}
He aqu el ejemplo anterior pero utilizando la instruccin until.
print "Teclea \"x\" para salir:\n";
print "Si se pulsa la tecla \"s\" no se
imprime:\n";
$ristra = "";
until ($ristra eq "x") {
$ristra = ; chop($ristra);
if ($ristra eq "s") {
next;
}
print "Has escrito $ristra\n";
}
print "Salida.\n"
9. La instruccin unless.
Esta instruccin es anloga al if, salvo que permite considerar la no verificacin de la prueba. Su sintaxis
es la siguiente:
unless (expresin) {
instruccin o bloque de intrucciones 1;
}
Para ver mejor el funcionamiento del unless, modificaremos el ejemplo anterior para adaptarlo a dicha
instruccin.
print "Teclea \"x\" para salir:\n";
print "Si se pulsa la tecla \"s\" no se
imprime:\n";
$ristra = "";
until ($ristra eq "x") {
$ristra = ; chop($ristra);
unless ($ristra eq "s") {
next;
}
print "Has escrito $ristra\n";

}
print "Salida.\n"

Expresiones regulares
Una expresin regular es un modelo o una forma de comparar con una cadena de caracteres. Esta
comparacin es conocida con el nombre de pattern matching o reconocimiento de patrones, permite
identificar las ocurrencias del modelo en los datos tratados. La utilizacin principal de las expresiones
regulares en Perl consiste en la identificacin de cadenas de caracteres para la bsqueda modificacin y
extraccin de palabras clave. De esta manera se pueden dividir las expresiones regulares en varios tipos
que son: expresiones regulares de sustitucin, expresiones regulares de comparacin y expresiones
regulares de traduccin.
1. Expresiones regulares de comparacin.
Nos permiten evaluar si un patrn de bsqueda se encuentra en una cadena de caracteres, de modo que
mediante este tipo de expresiones regulares obtendremos un valor lgico verdadero o falso segn se
encuentre el patrn deseado. La sintaxis de este tipo de expresiones regulares es la siguiente:
valor a comparar =~ patrn de bsqueda
He aqu un ejemplo:
# imprimimos todas las lneas que contengan "html". Ej.:
"htmlexe"
if ($linea =~ /html/) {
print $linea;
}
Los patrones de bsqueda pueden integrar informacin relativa al contexto, tal como la bsqueda de
lneas que empiecen por la cadena de caracteres, la extraccin de palabras que tengan prefijos o sufijos
particulares... Estos contextos se tienen mediante una representacin particular del modelo. Esta
representacin se explica en los siguientes apartados:
1.1. Patrones definidos por una clase de caracteres.
A menudo resulta prctico extraer las palabras que contienen una cifra, una vocal, o
caracteres de control particulares. El modelo as definido no se indica por un carcter
particular sino por un clase de caracteres mediante el operador [ ]. He aqu algunas
posibles construcciones:
[aeiou]
# Cualquier vocal
[0-9]
# Cualquier nmero del 0 al 9.
[0123456789]
# Igual [0-9]
[0-9a-z]
# Cualquier letra o cualquier
numro
[\~\@;:\^_]
# Cualquiera de los
caracteres(~,@,;,:^,_)
Generalmente de puede definir una clase de caracteres valindose de la
complementaria. sta se expesifica mediante la sintaxis [^ ]. Siendo el smbolo ^ el que
representa la negacin de los caracteres o clase de caracteres consecutivos:

[^0-9]

# Carcter que no sea un dgito

La definicin del patrn por clase se contempla con un conjunto de caracteres de


control. Estos facilitan la definicin de modelos complejos en rutinas de comparacin.
Estos facilitan la definicin de patrones complejos en rutinas de comparacin. La
siguiente tabla representa estas extenciones:

Por otro lado, decir que los smbolos \n, \r, \f y \t tienen su significado habitual, es
decir, significan nueva lnea, retorno de carro, salto de pgina y tabulacin
respectivamente.
A continuacin veremos otra lista de caracteres genricos que aumentarn la
flexibilidad en la contruccin de patrones de bsqueda. Estos caracteres se muestran en
la siguiente tabla:

1.2. Referencia de patrones.


Se utilizn para referenciar patrones en las expresiones regulares. Perl trabaja con dos
tipos de operadores de comparacin:
?? $1,$2,...,$9. Sirven para referenciar uno de los patrones de bsqueda de la
expresin regular. El nmero del 1 al 9 representa el patrn al que queremos
referirnos dentro de la expresin regular. As un ejemplo del uso de este
operador se puede observar en este cdigo en Perl que aade el articulo 'El' a
un nombre comn: (en este ejemplo se utilizar una expresin regular de
sustitucin que veremos en el siguiente apartado).
$var = "coche";
$var =~ s/(coche)/El $1/; # $1
equivale a coche
print $var;
?? \1,\2,...,\9. Este operador tiene la misma utilidad que el anterior se utiliza para
referenciar patrones, pero esta vez la referencia se ha de producir dentro de la
expresin regular. He aqu un ejemplo:

if ($var =~ (/^(\w)+.*\1$/) {
print $var;
}
Esta expresin regular de comparacin tiene el siguiente significado:
mediante la cadena ^(\w)+ nos referimos a todos los caracteres
alfanumricos que forman parte del principio de la cadena contenida
en $var, es decir, la cadena ha de empezar por uno o ms caracteres
alfanumricos. Con la cadena .* referenciamos un conjunto arbitrario
de caracteres de longitud desconocida, finalmente con la cadena \1
expresamos el primer patrn utilizado y con $ significamos que este
patrn debe de estar al final de la cadena contendia en $var. En
definitiva la expresin regular tomar el valor verdadero, cuando la
cadena de caracteres contenida en $var tenga la misma cadena de
caracteres alfanumricos al principio y al final. As por ejemplo, si
$var tiene una cadena de caracteres como esta: 'hola juansdfa hola' el
valor de la expresin regular ser cierto, ya que los espacios en
blanco no se consideran caracteres alfanumricos.
1.3. Utilizacin de carcteres reservados.
En la especificacin del modelo, cada carcter se interpreta para determinar las
ocurrencias en los datos. Sin embargo, los caracteres siguientes:
+ ? . * ^ $ ( ) [ ] { } | & \
son reservados por el lenguaje y deben ir precedidos por el smbolo de barra inversa \.
Esto permita ignorar su especificidad y considerar los como un carcter cualquiera. Por
ejemplo:
# busca ocurrencia de "ford" en $car
$marca = "ford";
if ($car =~ /$marca/) {
print $car;
}
# busca ocurrencia de "$marca" en $car
if ($car =~ /\$marca/) {
print $car;
}
1.4. Combinacin de expresiones regulares.
Se realiza con los operadores | y & que equivalen al or y al and lgico respectivamente.
Por ejemplo, con el operador | podemos representar una lista de alternativas, es decir:
if ($car =~ /ford | audi/) {
print $car;
}
mientras que con el operador & exigimos que la variable contenga las dos expresiones
regulares propuestas:
if ($direccion =~ /calle & piso/) {
print $direccion;
}
2. Expresiones regulares de sustitucin.

Las expresiones regulares de sustitucin permiten cambiar los patrones de bsqueda por caracteres
nuevos definidos por el usuario que componen el patrn de sustitucin, la sintaxis es la siguiente:
valor a sustituir =~ s/patrn de bsqueda/patrn de sustitucin/opciones
Las opciones las podemos ver en la siguiente tabla:

A continucin vamos a ver unos ejemplos para aclarar su manejo:


$var = 'abc123yz';
$var =~ s/d+/$&*2/e;
# $var = 'abc246yz'
$var =~ s/d+/sprintf("%5d",$&)/e; # $var = 'abc
246yz'
$var =~ s/\w/$& x 2/eg;
# $var = 'aabbccc
224466yyzz'
Nota: Como veremos en el captulo 10 con ms profundidad, $& es una variable
predefinida por el lenguaje que contiene el valor de la ltima cadena de caracteres
comparada exitosamente.
3. Expresiones regulares de traduccin.
Este tipo de expresiones regulares tienen una manera de trabajar muy parecida a la de las sustituciones.
En este caso se trata de comparar uno a uno los caracteres del patrn de bsqueda con los de la cadena de
sustitucin, de modo que cada vez que se encuentra una ocurrencia que coincide con uno de los caracteres
del patrn se intercambia por su correspondiente en la cadena del patrn de sustitucin. La sintaxis
general de esta expresion regular es la siguiente:
variable =~ tr/patrn de bsqueda/cadena a traducir/opciones
Las opciones las podemos ver en la siguiente tabla:

Tambin decir que este operador devuelve el nmero de reemplazados o borrados. He aqu algunos
ejemplos que nos servirn para tener una manejo:
$var =~ tr/A-Z/a-z/;
# transforma maysculas a
minsculas
$cnt = $var =~ tr/*/*/; # cuenta los arteriscos de $sky
$cnt = $var =~ tr/0-9//;# cuenta y suprime las cifras de
$sky
$var =~ tr/a-zA-z//s;
# elimina duplicados. bbookk ->
bok
$var =~ tr/a-zA-z/ /cs;
# cambia los caracteres no alfabticos en espacios y
elimina duplicados

4. Ejemplo.
Seguro que ha estas alturas todava no se tiene claro la diferencia entre los distintos tipos de expresiones
regulares, para aclarar el concepto introducimos los siguientes ejemplos:
En primer lugar vemos una expresin regular de bsqueda que dar cierto si en la variable $copia se
encuentra el patron copia. Si es as, como veremos se imprimir un mensaje.
$copia = "copy, xcopy, diskcopy";
if ($copia =~ /copy/) {
print "Encontrada la cadena copy";
}
A continuacin viene un ejemplo de expresin regular de sustitucin:
$copia ="copy, xcopy, diskcopy";
$copia =~ s/copy/copia/g;
Esta operacin reemplaza todas las ocurrencias de copy por copia quedando:
"copia, xcopia, diskcopia"
En ltimo lugar realizaremos un ejemplo con una expresin regular de traduccin:
$copia = "copy, xcopy, diskcopy";
$copia =~ tr/copy/12345/;
Como se ve en este caso, se sustituye cade ocurrecia de 'c' por 1, de 'o' por 2, de 'p' por 3 y de 'y' por 4. El
carcter de traduccin 5 es ignorado puesto que no tiene ninguna correspondencia con ninguno de los
caracteres de patrn. Por tanto, el contenido de la variable $copia ser:
"1234, x1234, disk1234"
Otro caso podra ser el siguiente:
$copia = "copy, xcopy, diskcopy";
$copia =~ tr/copy/123/;
Este ejemplo es idntico a el anterior pero en este caso slo tenemos dos caracteres en la cadena de
traduccin. As, cuando el nmero de caracteres en la cadena de traduccin es menor que el nmero de
caracteres del patrn, las ocurrencia de los caracteres del patrn que no tienen correspondencia con
ningn caracter de traduccin, son intercambiados por el ltimo de los caracteres de traduccin. Por tanto,
el contenido de la variable $copia ser:
"1233, x1233, disk1233"

Definicin de funciones
La definicin de funciones permite asociar un nombre a un conjunto de instrucciones Perl. La sintaxis
para la definicin de funcin es:
sub nombre_de_funcin {
instrucciones;
[return Variable o expresin;]
}
donde nombre_de_funcin representa el nombre de la funcin. A cada llamada a la funcin, el cdigo de
instrucciones delimitadas por llaves se ejecuta. La definicin de una funcin es global y en consecuencia
puede insertarse al principio o al final del archivo.
La llamada a la funcin se puede realizar de dos formas:
& nombre_de_funcin;
do nombre_de_funcin();
Las dos formas producen el mismo resultado con la excepcin de que en el caso de do hay siempre que
poner los parntesis. Una llamada a una funcin puede insertarse en las estructuras y operadores en Perl.
El valor devuelto por la llamada a una funcin corresponde al valor precisado por el operador return.
Cuando este est ausente, el resultado de la ltima instruccin corresponde al resultado de la ltima
instruccin ejecutada en el cuerpo de la funcin. Por ejemplo:
sub diferencia {
if ($x < $y) {
print "$x es inferior a $y\n";
$y-$x;
}
else {
print "$x es superior o igual a $y\n";
$x-$y;
}
}
$x = 2; $y = 3;
$abs = &diferencia; # $abs = 1
En este ejemplo, la funcin visualiza un mensaje y devuelve el valor absoluto de la diferencia de $x y $y.
Permutando las instrucciones de visualizacin y de clculo, la funcin devolver 1, valor correspondiente
a una visualizacin correcta.
Los argumentos de una funcin.
Al llamar a una funcin cuando esta va seguida de una lista de variables, stas ltimas se consideran
como sus argumentos. El lenguaje Perl duplica el contenido de estas variables en la variable predefinida
@_ durante la ejecucin de la funcin. La variable @_ permite as acceder a los parmetros de la funcin.
Estos se colocan en la matriz $_[0], $_[1], ..., $_[n-1] referenciando los diferentes argumentos de la
funcin. Por ejemplo.
sub diferencia {
if ($_[0] < $_[1]) {
$_[1]-$_[0];
}
else {
$_[0]-$_[1];

}
}
$abs = &diferencia(2,3); # $abs = 1
Las variables locales y globales.
Las variables referenciadas en una funcin son de modo predeterminado variables globales, es decir,
comunes a todo el script. Para evitar los conflictos entre las variables propias de la funcin y las otras
variables, es necesario declarar explcitamente las variables locales (propias de la funcin) mediante el
operador local. Este operador tiene como argumentos una lista de nombres de variables a las que asocia
variables locales. Cuando hay conflicto entre nombre de variables locales y globales en la definicin de
una funcin, slo se tiene en cuenta la variable local en el cuerpo de la funcin y el valor global queda
sin cambios. Por ejemplo:
sub producto {
local($p) = 1;
foreach $_(@_) {
$p *= $_;
}
}
$p = 3;
print &producto(2,3,4);
print "$p\n";

# visualiza 24
# visualiza 3

Es aconsejable asignar a las variables locales los argumentos pasados a la funcin. Esto permite una
mejor legibilidad de las funciones. Esto se realiza combinando el operador local con la variable
predefinida @_. Por ejemplo:
sub Area_cuadrado {
local($radio) = @_;
return $radio*$radio;
}

# el return sobra

Paso de parmetros por referencia.


Hasta ahora hemos visto el pasa de parmetros por valor, es decir, no es posible cambiar los valores
globales de los argumentos. Para hacer esto posible es necesario pasar a la funcin no los valores, sino los
nombres de estas variables. Este modo se denomina paso por referencia y se implementa prefijando el
nombre de la variable con un arterisco *.
En el momento de la definicin de una funcion cuyos argumentos se pasan por referencia, la asignacin
de los argumentos a las variables locales se hacen mediante el operador local(*nombre). El ejemplo
siguiente ilustra este modo de paso de argumentos describiendo la rutina swap que hace la permuta de los
valores de los argumentos.
sub swap {
local(*x, *y) = @_; # asignacin local de los
argumentos
local($t);
# variable local
$t = $x;
$x = $y;
$y = $t;
return @_;
# resultado de la funcin
}
$a = 4; $b = 1;
&swap(*a, *b);
# $a =1; $b = 4;

Resulta esencial que la asignacin de los argumentos a las variables locales se haga mediante el operador
local. Ya que la asignacin directa de la variable local mediante *nombre=valor modifica las ocurrencias
de la variable nombre en el script. Por ejemplo:
sub swap {
(*a, *b) = @_;
local($t);
$t = $a;
$a = $b;
$b = $t;
return @_;
}
$a = 4; $b = 1;
$x = "pi"; $y = 1.414;
&swap(*x, *y);
print "a=$a, b=$b\n";

# asignacin de argumentos

# $x = 1.414; $y = "pi"
# $a = 1.414; $b = "pi"

Entrada / Salida
Perl interacta con el usuario o con el sistema operativo por medio de entradas salidas que permiten el
intercambio de informacin. Este intercambio de datos se gestiona por medio de operadores especficos
que configuran una interfaz entre el script y su entorno.
1. El acceso a archivos en Perl.
Perl accede a los archivos de tipo ASCII por medio de punteros a archivos. Estos se referencian mediante
variables y constituyen el enlace entre el script y el archivo consultado. Se utilizarn maysculas para
representar estas variables a fin de no equivocarse con otras variables. Los archivos se consultan mediante
la rutina open que admite dos argumentos, un puntero de archivo y un nombre de archivo:
open(PUNTERO, "modo de acceso + nombre de archivo");
El argumento de open que representa el nombre de archivo puede tener cualquiera de los prefijos que se
muestran en la siguiente tabla, estos prefijos indican el modo de acceso al archivo (si no se pone ningn
prefijo es que se toma el modo de acceso por defecto que es el de lectura):

En cuanto a los punteros a archivos decir que, cuando se ejecuta un programa en Perl su primera actividad
es asignar un puntero o manejador de archivo para el canal de entrada, otro para el canal de salida y otro
para el de informacin de errores. Estos punteros son respectivamente STDIN, STDOUT y STDERR,
donde se puede observar que STD significa estndar. Los tres STD se usan con tanta frecuencia en Perl
que a menudo se suponen que existen, y por consiguiente, Perl no necesita que se mencionen
explcitamente, en lugar de ello, Perl los crea y les asigna canales automticamente. Por ejemplo:
print "hola";
print STDOUT "hola";
Estas dos lneas realizan lo mismo ya que Perl supone que STDOUT es el monitor y por eso visualiza sin
necesidad de indicar en ningn lugar STDOUT.
En el ejemplo que se puede ver a continuacin, forzamos un error muy tpico en los progrmadores no
cerrar comillas:
print "hola;
El resultado de la ejecucin de este programa ser un mensaje paracido a este:
Can't find string terminator...line 3
Sabemos que con el simbolo > podemos redirigir una salida de pantalla a un archivo. Pero si tecleamos:
hola.pl > error.txt
El archivo error est vaco. Esto es porque la salida estndar de los errores STDERR es la pantalla. Para
que se grave el error en el archivo hay que direccionar el canal de error, que en Unix es el 2, al archivo.
Esto se hace como sigue:
hola.pl 2>error.txt
2. El operador de entrada <>.
Una vez iniciado el puntero mediante la rutina open, este mismo puntero permite acceder al contenido del
archivo por medio del operador <>. El contenido del archivo se recorre lnea por lnea mediante la
estructura <PUNTERO>. Al final de la utilizacin el archivo se cierra mediante el operador close. El
ejemplo siguiente indica como acceder al contenido del archivo data.txt y guardar el resultado en el
archivo out.txt:

open(IN, "data.txt");
open(OUT, ">out.txt");
while($linea = <IN>) {
# manipula los caracteres leidos y puestos en la
variable
# $linea. Por ejemplo convertir los caracteres a
minsculas
$linea =~ tr/A-Z/a-z/;
# escritura del resultado
print OUT $linea;
}
close(IN);
close(OUT);
El ejemplo siguiente visualiza en la consola el nombre de cada usuario y su directorio predeterminado.
Esta informacin se extrae del archivo "/etc/passwd" que contiene la descripcin de cada login. Para ello
es necesario saber que cada lnea del archivo passwd est compuesta por: el nombre que usa el usuario
para entrar (login), la contrasea encriptada (password), nmero que identifica al usuario (uid), nmero
que identifica al grupo al que pertenece el usuario (gid), informacin sobre el usuario (User_Information),
directorio inicial del usuario (login_directory) y el interprete de comandos usado por dicho usario
(login_shell). Esta informacin relativa al usuario se estructura en dicho fichero en una lnea de la
siguiente manera:
login:password:uid:gid:User_Information:login_directory:login_shell
Por tanto, este ejemplo se realizar de la siguiente manera:
open(PASSWD, "/etc/passwd");
while ($p = <PASSWD>) { # lee una lnea del archivo
chop($p); #quitamos el salto de lnea
@field = split(/:/, $p);
print " Usuario $field[0] y su directorio es
$field[5]";
}
close(PASSWD);
A continuacin se da de alta a un usuario si clave de paso, esto se realiza escribiendo en el archivo
"/etc/passwd":
open(PASS, ">>/etc/passwd");
print PASS, "$login::$uid:$gid:$information:";
print PASS, "$login_dir:$login_shell\n";
close(PASS);
Si STDIN se encuentra del operador <>, lee una lnea cada vez desde ese manejador de archivo. Por
ejemplo:
$uno = <STDIN>;
$dos =<STDIN>;
print $uno.$dos;
Al ejecutar este script, teclear unas palabras seguidas de enter y repetir lo mismo una segunda vez. A
medida que escribimos <STDIN> lee lo que tecleamos y al pulsar enter lo asigna a la variable $uno. Lo
mismo ocurre le ocurre a $dos. Pero, si se ejecuta este otro script:
while ($linea = <STDIN>) {
print $linea;
}

Este script permite hacer un bucle para leer y escribir tantas lneas como queramos. La condicin se
escribe entre parntensis y las lneas que hacen el bucle entre llaves. Para finalizar la entradadesde el
teclado pulsar Control+Z.
Por otro lado, el acceso en lectura a un archivo es dependiente del contexto. En un contexto escalar, Perl
lee un archivo lnea por lnea y lo asigna al escalar. En un contexto de array o lista, el acceso al contenido
del archivo entraa una lectura completa del archivo. Cada elemento del archivo contiene entonces una
lnea completa del archivo ledo. Por ejemplo:
$file = "datos.txt";
open(DATA, $file) || die "no se puede abrir el archivo\n";
@lineas = <DATA>
# lee todo el archivo.
close(DATA);
La funcin die manda una cadena de caracteres por el canal de error.
Esta propiedad debe utilizarse con precaucin, porque la lectura completa de un archivo corre el riesgo de
ser muy costosa en memoria. Por otra parte, el lenguaje Perl utiliza caches para las entradas/salidas y en
consecuencia la lectura completa de un archivo no entraa necesariamente una ganancia en materia de
rendiemiento.
3. Los canales de comunicacin (pipes).
La rutina open de Perl puede utilizarse tambim para ejecutar mandatos del shell, modificar sus entradas y
recuperar sus salidas. Cuando el nombre del archivo lleva como prefijo el carcter |, este nombre se trata
como un mandato. Este mandato se ejecuta y comunica con el script Perl mediante la rutina print.
Veamos un ejemplo:
open(MAIL, "Mail root"); # prepara un mail al superusuario
# contenido del mail
print MAIL "La cuenta del usuario a2344 ha expedido";
# envo del mail
close(MAIL);
Por otro lado, cuando el nombre del archivo va seguido del carcter |, el mandato se ejecuta y se puede
acceder a su resultado por medio del operador <>. Por ejemplo:
# examina las personas conectadas a la mquina
open(WHO, "who|");
while($who = <WHO>) {
chop $who; # suprime el retorno de carro
($user, $tty, $junk) = split(/\s+/, $who, 3);
print "El usuario $user est en la terminal $tty\n";
}
close(WHO);
4. Los operadores de comprobacin de archivos.
Estos operadores tratan de resolvernos diferentes problemas como la verificacin de la existencia de un
archivo antes de modificarlo o la supresin de archivos existentes en la creacin de archivos con el mismo
nombre. Estas verificaciones se llevan a cabo mediante operadores que proporcionan informacin relativa
a los archivos. Estos opeadores que veremos en la tabla que se muestra a continuacin son unarios, su
argumento es un puntero de archivo.

Por ejemplo:
$data = "data.txt";
if (e- $data) {
# OK, el archivo existe
open ...
}
else {
print "el archivo $data no existe.\n";
}
5. Las funciones print, printf y sprintf.
Las funciones print y printf permiten la escritura o la visualizacin de un resultado. El operador print
enva la cadena de caracteres al puntero de archivo pasado como argumento. Cuando ste est ausente, el
utilizado es el puntero STDOUT que representa la salida estndar (la consola). La sintaxis de este
operador es:
print PUNTERO $str1, $str1, ..., $strN;
Por otro lado la funcin printf permite especificar el formato de escritura. El texto as formateado se enva
al puntero de archivo pasado como argumento. Este formato es idntico al del lenguaje C. Por lo tanto el
texto formateado consta de una ristra de caracteres. Los caracteres de ristra se escriben tal cual a
excepcin del %. El % indica que hay que mostrar un parmetro de la lista, el siguiente al ltimo
mostrado, con un formato en concreto el cual lo indica el caracter que sigue al %. Los caracteres ms
comunes y el tipo de datos que representa se muestra en la siguiente tabla:

Si se desea imprimir el % como un carcter dentro de una cadena de control, debe utilizarse %%.
Hay que tener en cuenta que los literales de ristras permiten escribir caracteres especiales con lo que se
denomina un secuencia de escape. La secuencia de escape comienza siempre con "\" y a continuacin se
escribe otro carcter que representa el cdigo especial o el nmero en octal o hexadecimal de su cdigo
ASCII. Las secuencias de escape representan un nico carcter en la ristra donde aparecen.

Un ejemplo sencillo:
printf PUNTERO "%s %f", $string, $float;
printf "Enteros: base10=%s, base8=%o, base16=%x\n", $y,
$z, $w;
# El identificador es STDOUT (visualizacin por pantalla).
La funcin sprintf devuelve una cadena de caracteres formateada por la conveciones normalmente
utilizadas por printf, para ello se recomienda ver las dos tablas anteriores. Para ver mejor el
funcionamiento de esta rutina introducimos el siguiente ejemplo:

$lenguaje = "Perl";
$longitud = 10;
$conformato = sprintf("%s", $lenguaje);
print $conformato,"\n";
#
Imprime:Perl
$conformato = sprintf(">>%s<<", $lenguaje);
print $conformato,"\n";
#
Imprine:>>Perl<<
$conformato = sprintf(">>%s <<", $lenguaje);
print $conformato,"\n";
#
Imprime:>>Perl <<
$conformato = sprintf(">>%10s<<", $lenguaje);
print $conformato,"\n";
# Imprime:>>
Perl<<
$conformato = sprintf(">>%-10s<<", $lenguaje);
print $conformato,"\n";
#
Imprime:>>Perl <<
$conformato = sprintf(">>%-${longitud}s<<", $lenguaje);
print $conformato,"\n";
#
Imprime:>>Perl <<
6. Las funciones para manejo de ficheros.
Para realizar un mejor tratamiento de los datos que se encuentran en ficheros, Perl posee una serie de
funciones predefinidas que nos ayudan a realizar esta tarea con gran facilidad y simp leza. A continuacin
mencionaremos a las funciones ms usadas por todos los programadores de Perl.
?? read(manejador, variable, longitud, [desplazamiento]). Esta funcin lee
desde un fichero, especificado en el parmetro manejador, un nmero de
bytes, especificado por el parmetro longitud, y lo introduce en una variable de
tipo escalar representada por el parmetro variable. El parmetro
desplazamiento, si se especifica, indica desde que posicin del fichero se
empieza a leer. Por defecto, es la posicin donde se encuentra el puntero. He
aqu algunos ejemplos:
open(DAT,"<datos.txt");
read(DAT, $var, 30);
# $var tiene los primeros 30
caracteres de
# datos.txt
?? seek(manejador, posicin, referencia). La funcin seek pone el puntero del
fichero especificado por el parmetro manejador en el lugar indicado por el
parmetro posicin. El parmetro posicin puede tener un valor positivo que
nos indica un desplazamiento hacia el final del fichero o un valor negativo que
nos indica un deplazamiento hacia el inicio del fichero. Este desplazamiento
indicado en el parmetro posicin se puede hacer desde el principio del
fichero, desde la posicin del puntero actual del fichero o desde el final del
fichero. Esto lo determina el parmetro referencia con los valores 0,1 y 2
respectivamente. Ejemplo:
open(DAT,"<datos.txt");
read(DAT, $var, 30);
seek(DAT,-31,1);
read(DAT, $var, 30); # Volvemos a
leer lo mismo.
?? tell(manejador). Esta funcin retorna la posicin del puntero en el fichero
especificado en el parmetro manejador. Ejemplo:

open(DAT,"<datos.txt");
read(DAT, $var, 30);
$ptr = tell(DAT);
# $ptr = 31;
?? eof(manejador). Esta funcin retorna 1 (verdadero) si el fichero especificado
por el parmetro manejador tiene el puntero en el final del mismo. Tambim
devolver uno si el manejador no est asociado a ningn fichero. En el
ejemplo que viene a continuacin se leer un fichero de nombre en el que cada
uno de ellos est en una lnea del fichero y ocupa 50 caracteres contando con
el de salto de lnea.
open(NOM,"<nombres.txt);
while (!(eof(NOM))) {
read(NOM, $nombre, 50);
print $nombre;
}

Variables predefinidas
Las siguientes variables tienen un especial significado para el lenguaje Perl. Estas variables se pueden
clasificar en tres tipos:
1. De fichero.
Estas variables contienen algunos valores perteneciente la manejador de ficheros seleccionado
actualmente. Cada manjador de fichero necesita su propio conjunto de valores. Cuando seleccionamos
otro manejador de fichero, el manejador de fichero anterior mantiene sus valores pero las variables
reflejarn ahora los valores del nuevo. Los variables predefinidas de fichero son las siguientes:
??
??
??
??
??
??

$%: Nmero de pgina del canal de salida actual.


$=: Tamao de pgina del canal de salida actual.
$- : Nmero de lneas restantes en la pgina del canal de salida actual.
$|: Si no es cero, fuerza a vaciar el buffer despus de cada operacin de escritura.
$~: Contiene el nombre del formato o report definido para la salida actual.
$^: Es el nombre del formato o report de la cabecera definido para la salida actual.

2. Locales.
Estas variables son locales al bloque de cdigo actual. Las variables locales predefinidas son las
siguientes:
?? $1...$9: Contiene la subcadena desde el correspondiente al conjunto de parntesis en la
ltima cadena comparada con xito.
?? $&: Representa el valor de la ltima cadena de caracteres comparada con xito.
?? $`y $: Estos dos trminos se utilizan conjuntamente para separar cadenas de caracteres
comparadas con xito. ` es la anterior y es la siguiente. Ejemplo:

$linea = 'abcdefghi';
$linea =~ /def/;
print "$`:$&:$'\n";

# imprime abc:def:ghi

?? $+: El ltimo xito de la ltima bsqueda del ltimo patrn. Es til cuando no se sabe que
patrn de un conjunto fue el encontrado.
3. Globales.
Estas variables tiene el mismo significado en todo el script, as como en los paquetes que utiliza. Las
variables globales predefinidas son las siguientes:
?? $_: Contiene el contenido del ltimo registro ledo de un fichero. Es el argumento
predeterminado que poseen varias funciones y construcciones en Perl. Por ejemplo:

??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??
??

if (/html/) {
/html/) {
print $_;
}

if ($linea =~

while (<STDIN>){
<STDIN>){
print "escrito: ", $_
", $linea;
}

while ($linea =

$_ = "nom1&nom2";
"nom1&nom2";
@lista = split(/&/);
split(/&/, $linea);

$linea =

print $linea;
}

print "escrito:
}

@lista =

$.: Contiene el nmero de la ltima lnea leda de un fichero.


$/: Separador de campo para la entrada.
$,: Separador de campo para la salida, aplicable a print.
$\: Separador de registro para la salida, aplicable a print.
$"": Como $, se aplica a arrays en bsquedas de cadenas entre dobles comillas (cadenas que se
interpreten de la misma forma).
$#: El formato de salida para mostrar nmeros.
$$ : Es el nmero de proceso perl del scripts que se esta ejecutando actualmente.
$?: El valor de estado devuelto por la ltima tubera (pipe) que se cerr, por el comando
ejecutado con el backquote (`\`) o por una operacin del sistema.
$*: Puesto a 1 realiza bsquedas en varias lneas con una misma cadena, a 0 para indicar al
compilador que las cadenas son de una nica lnea para optimizar bsquedas.
$[: Contiene el valor del primer ndice de una array de escalares, por defecto es 0.
$]: Contiene la cadena mostrada cuando se invoca "perl -v", es decir la versin del compilador,
etc. Puede ser til para comprobar al comienzo del script, que la versin del intrprete que
ejecuta el script es la correcta.
$;: Es el separador para emular arrays multi-dimensionales.
$!: Contiene el valor actual de ERRNO, es decir, el ltimo error acontecido.
$0: Contiene el nombre del fichero que hemos dado a nuestro perl script.
$<: Uid real del proceso actual.
$>: Uid efectivo del proceso actual.
$@: Contiene el mensaje de error de sintaxis de perl del ltimo comando evaluado. Si es nulo
quiere decir que el ltimo comando se ejecut correctamente y estaba bien escrito.
$(: Gid real del proceso actual.
$): Gid efectivo del proceso actual.

?? @ARGV: Contiene los parmetros pasados a nuestro script Perl. Por ejemplo:
# Lee argumentos de la lnea de comando y los
lista.
$NumArg = $#ARGV; # Almacena el nmero de
argumentos
$Cuenta = 0;
while ($Cuenta < $NumArg) {
print "Argumento0 ",$Cuenta,"->",$ARGV[$Cuenta], "\n";
$Cuenta++;
}
?? %ENV: Array asociativo que contiene las variables de entorno bajo el que se ejecuta nuestro
script Perl.
?? $:: El conjunto actual de caracteres tras los que una cadena se rompe para llenar los campos
siguientes (que empiecen con ^) en un formato.
?? $^D: Los valores actuales de los flags de depuracin.
?? $^F: El mximo descriptor de fichero del sistema, normalmente 2. Los descriptores de fichero
del sistema son pasados a los procesos hijos, mientras que los superiores no. Durante una
apertura, los descriptores de fichero del sistema se guardan, incluso si falla la operacin.
?? $^I: Contiene el valor actual de la extensin del editor. Con undef se desactiva.
?? $^L: Qu formato utilizar para realizar un salto de lnea. Por defecto: \f.
?? $^P: Flags internos que el depurador borra. Se puede desactivar el depurador borrndolos.
?? $^T: El tiempo, en segundos, transcurrido desde que el script comenz a ejecutarse.
?? $^X: El nombre con el que Perl se ejecut, argv[0].
?? $ARGV: Contiene el nombre del fichero actual cuando se lee de <ARGV> .
?? @INC: El array INC contiene la lista de lugares en donde buscar scripts en Perl para ser
evaluados por el comando "do EXPR" o "require". Contiene inicialmente los argumentos de
cualquier lnea de comando -I , seguido de la librera Perl por defecto, probablemente
"/usr/local/lib/perl", y un punto ".",para representar el directorio actual.
?? %INC: El array asociativo INC contiene entradas para cada nombre de fichero que ha sido
incluido va "do" o "require". La clave es el nombre del fichero especificado y el valor es la
localizacin del fichero encontrado. El comando "require" usa este array para determinar cuando
un fichero ha sido incluido.
?? $ENV{expr}: Es un array asociativo que contiene tu entorno actual. El entorno de los procesos
hijo se puede cambiar colocando un valor en este array.
?? $SIG{expr}: Es otro array asociativo usado para inicializar manejadores de seales para
distintas seales. Este array slo contiene valores para las seales inicializadas por el script.

También podría gustarte