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

LENGUAJE DE

PROGRAMACIN PERL
Tpicos de Lenguajes de Programacin
Introduccin
Perl es un lenguaje de programacin multi-plataforma
libre
Bajo licencia GNU General Public License.
Fue creado por Larry Wall.
Perl tiene las siguientes caractersticas:
Basado en C, awk, sed, sh y Basic
Perl soporta tanto programacin procedural como
orientada a los objetos.
Interacta con libreras C/C++ externas mediante XS o
Swing.
Es extensible, en CPAN (Comprehensive Perl Archive
Network) podemos encontrar ms de 500 mdulos
disponibles.
El intrprete de Perl se puede empotrar en otros
sistemas.
Algunos lo tachan de crptico.
Actualmente en versin 5.8.6.
Qu es Perl?
Perl ha sido un lenguaje de programacin muy popular para el
desarrollo web, creacin de CGIs, gracias a:
Su capacidad de procesamiento de texto
Su rpido ciclo de desarrollo.
El mdulo CGI.pm de su distribucin estndar hace muy sencillo el
manejo de formularios HTML.
Perl puede manejar datos web encriptados, incluyendo
transacciones de e-comerce.
El mdulo mod_perl permite empotrar en Apache el intrprete de
Perl.
El mdulo DBI (Database Integration Interface) permite
una integracin con bases de datos muy sencilla.
Soporta todo tipo de bases de datos, incluida MySQL.
Su popularidad en el desarrollo web ha decrecido ostensiblemente
a favor de PHP
Perl y la Web
Sintaxis
Un lenguaje interpretado
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.
El intrprete de Perl
?? 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.
Opciones del intrprete de perl :
Tipos de Datos
1. Los tipos bsicos de datos
bsicos.
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 ejemplo:

$x = 0.897; # un real
$y = 6.23e-24; # un real
$n = 567; # un entero
$i = -234; # un entero

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; # equivale a 255
$y = 0xff; # equivale a 255
1. Los tipos bsicos de datos
bsicos.
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!".
1. Los tipos bsicos de datos
bsicos.
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. Los tipos bsicos de datos
bsicos.
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. Las representaciones de
datos.
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 .
2. Las representaciones de
datos.
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. Las representaciones de
datos.
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);
2. Las representaciones de
datos.
Los elementos de un array se referencian mediante ndices. El primer elemento
sereferencia por el ndice 0. Por ejemplo:

$numero[4]; # vale 2.2
$letras[2]; # vale "len"
$mezcla[0]; # vale "hola"

Tambin se puede acceder a un array mediante el operador que define una horquilla
de ndices. Por ejemplo:

@num1 = @numeros[1..3]; # @num1 = (1, 667, 23)
@str = @letras[0,2]; # @str = ("perro", "len")
($ristra, $num) = @mezcla; # $ristra = "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.
2. Las representaciones de
datos.
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.
2. Las representaciones de
datos.
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.
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 referencia se usa mediante el
operador de referencia backslash ("\"). No existe un
operador de desreferencia.
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. Las referencias.
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.
4. Las referencias.
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
4. Las referencias
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
1. Los operadores asociados a
escalares.
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.

1. Los operadores asociados a
escalares.
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:
1. Los operadores asociados a
escalares.
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.
1. Los operadores asociados a
escalares.
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.
1. Los operadores asociados a
escalares.
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. Los operadores asociados a
escalares.
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. Los operadores asociados a
escalares.
1.8. Smbolos de puntuacin.
En Perl tenemos los smbolos de puntuacin
que a diferencia de otros lenguajes son
considerados operadores en Perl.
' '. Especifica valores literales. No hace
sustituciones.
Ejemplo:
$fecha = "14 de Julio";
print 'hoy es $fecha'; # imprime "hoy es
$fecha"
1. Los operadores asociados a
escalares.
" ". 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
2. Los operadores asociados a
arrays
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. Los operadores asociados a
arrays
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)



2. Los operadores asociados a
arrays
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)
@five = (3,4,5);
unshift(@five,1,2); # @five = (1,2,3,4,5)
$x = shift(@five); # $x=1, @five=(2,3,4,5)

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. Los operadores asociados a listas
asociadas.
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. Los operadores asociados a listas
asociadas.
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. Los operadores asociados a listas
asociadas.
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
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;
}
2. La instruccin while.
La instruccin while ejecuta iterativamente un
bloque de instrucciones mientras una
expresin sea vlida, evaluando la
comprobacin en cada iteracin:

while (expresin) {
instruccin o bloque de instrucciones;
}
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.
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.
Expresiones Regulares
1. Expresiones regulares de
comparacin.
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(~,@,;,:^,_)
1. Expresiones regulares de
comparacin.
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:
$var = "coche";
$var =~ /(coche)/El $1/; # $1 equivale a coche
print $var;
1. Expresiones regulares de
comparacin.
\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;
}
1. Expresiones regulares de
comparacin.
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. Expresiones regulares de
comparacin.
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:
2. Expresiones regulares de
sustitucin.
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 = 'aabbccc224466yyzz'

Nota: $& 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
3. Expresiones regulares de
traduccin.
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
Definicin de Funciones
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.

Definicin de Funciones
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); # visualiza 24
print "$p\n"; # visualiza 3
Paso de parmetros por
referencia.
En el momento de la definicin de una funcin 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;
Entrada/Salida
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");
1. El acceso a archivos en Perl.
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):
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);
3. Los canales de comunicacin
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);
3. Los canales de comunicacin
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.







Por ejemplo:
$data = "data.txt";
if (e- $data) {
# OK, el archivo existe
open ...
}
else {
print "el archivo $data no existe.\n";
}
Gracias!!

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