Perl
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.
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.
=
=
=
=
0.897;
6.23e-24;
567;
-234;
#
#
#
#
un
un
un
un
real
real
entero
entero
# equivale a 255
# equivale a 255
$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:
# 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
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;
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.
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.
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);
# @five = (1,2,3,4,5)
# @five = (5,4,3,2,1)
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:
}
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]
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:
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:
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
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:
??
??
??
??
??
??
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 =
?? @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.