4. Variables
Principalmente, es un lenguaje para la manipulación de cadenas de
datos y de archivos, y su diseño ignora la distribución en pantalla de botones,
menús, listas de selección, y otros elementos propios de una interfaz, es decir,
no es nada vistoso, aunque su especialización en el uso de modelos de búsqueda lo
hace muy potente. Perl es un intérprete que fue creado por Larry Wall y liberado al mundo para
disfrute de cualquier persona. Larry cedió Perl de forma gratuita, estipulando
como tal su uso, el acceso libre a los intérpretes, y a las mejoras de Perl.
Y condicionó su utilización a que no se hiciera explotación comercial o de lucro. Es una combinación de las características de los lenguajes más
usados por los programadores de sistemas, como son los shell del sistema operativo UNIX,
los utilidad (que incluye un lenguaje interpretado propio) awk para formateo
y tratamiento de texto e incluso caracteristicas de Pascal, aunque su potencia
se basa en la similitud con las mejores características del lenguaje
estructurado C. En general cualquier utilidad que se necesite realizar en sh,
awk, o sed, se puede implementar de una manera mas potente y sencilla mediante
el lenguaje PERL Hay versiones de Perl para casi todas las plataformas que existen e incluso para
Linux, con el se disfuta de la mayoria de funciones del lenguaje, y su uso está
muy extendido en Internet, aunque no podemos olvidar que Perl nació en el
entorno Unix como una herramienta auxiliar de rastreo de archivos y extracción
de información, como su propio nombre lo indica.
Para ejecutar el intérprete basta con teclear Perl en la línea de comando,
seguido opcionalmente de parámetro/s, sentencia o programa de extensión .pl.
El parámetro -v hace que el intérprete muestre la versión del mismo.
C:\>PERL -v
Ejemplo: This is perl, version 5.001
Unofficial patchlevel 1m.
Copyright 1987-1994, Larry Wall Win32 port Copyright (c) 1995
Microsoft Corporation. All rights reserved. Developed by hip
communications inc., http://info.hip.com/info/
Perl for Win32 Build 108 Built Jun 28 1996@13:37:45
Mediante modelos de caracteres podemos explorar archivos y visualizar las
ocurrencias de un determinado modelo.
Los modelos se expresan escribiéndolos entre dos barras: /expresión/
Vamos a probar directamente desde la línea de comando...
Ejemplo: Del archivo SALUDO.TXT queremos visualizar las líneas que contengan la palabra "Hola". Teclear:
C:\>PERL -ne "print if /Hola/;" saludo.txt Otros ejemplos: el fichero AVERIAS.TXT nos servirá para utilizar nuevas formas
de búsqueda y conocer parte de la potencia de Perl en este tema:
- Extraer las averías de Luis López.
Hola, Mundo...
Hola Mundo, otra vez.
Ejemplo: Del archivo SALUDO.TXT queremos visualizar las líneas que contengan
al menos un punto. Teclear:
C:\>perl -ne "print if /./;" saludo.txt
Resultado:
Hola, Mundo...
...Adios, Mundo.
Hola Mundo, otra vez.
Adios Mundo.
C:\perl>perl -ne "print if /Luis López/;" averias.txt
- Extraer todas las averias de la marca HP.
C:\perl>perl -ne "print if /HP/;" averias.txt
Modelo de Clase [aeiou]..
Se usa para establecer un rango de caracteres permitidos.
/bar.[aeiou].*/ # barca, barquero, barcelonés, bares, abarcar
/c[ao]../ # cara, cosa, cata, cala, coto, cana, cono
/[0-9]/ # 0,1,2,3,4,5,6,7,8,9
/[A-Z][a-z]/ # Aa, Za, Jk, Lm ...
/[a-zA-Z]/ # a, A, B, J, Z ...
/[A-CJ-L2-5]/ # A, B, C, J, K, L, 2, 3, 4, 5
/[^a-c].*/ # diente, zoo (cualquiera que no empiece por a,b o c)
/SE-[^A-Za-z]{4}-[^0-9]?/ # SE-0001-C, SE-8887-BJ, SE-1100-DA
Modelo de alternativa / | /.
Se usa para indicar opciones alternativas en un módelo de búsqueda.
/No fu|Si ca/ # No fumo, Si canto, No futbol, Si carros
/chicos/chicas/ # llegaron chicos, van chicas, las chicas
/No (fum|ju).*ar/ # No fumigar, No fumar, No jurar, No jugar
Carácteres especiales para modelos.
^ El modelo comienza al principio de la cadena.
$ El modelo termina al final de la cadena.
\r Retroceso de carro, 13 decimal ASCII.
\n Alimentación de línea 10 decimal ASCII en UNIX. 13+10 en DOS
\t Tabulación, TAB, 9 decimal ASCII.
\f Alimentación de página, 12 decimal ASCII.
\d Dígitos. Equivale a [0-9].
\D No dígitos.
\w Alfanumérico [a-zA-Z0-9_] (incluida barra subrayado).
\W No alfanumérico.
\s Espacio en blanco (incluye espacio, \t, \r, \n, \f).
\S Negación de \s. \b Límite ini-fin de palabra; coincide con puntuación, \s o \w.
\B Negación de \b.
Ejemplos:
/^\d+\t/; # comienzo de cadena por uno o más digitos seguidos de tab.
/\D$/; # cualquier cadena que termine en algo que no sean números.
Otros modelos útiles.
Modelo =~.
Modelo //i.
Modelo s///.
Modelo s///g.
Modelo tr///.
Modelo (Subexpresión) $1 $2...
Modelo s///e.
Variables escalares $.
Cualquier nombre que comience con $ es una variable escalar, lo que significa que puede contener sólo un objeto, aunque este objeto puede ser también complejo. El signo = se usa para asignar el objeto a la variable. Los caracteres permitidos para un nombre son las letras, dígitos y el caracter de subrayado. Después de $ debe continuar al menos una letra. Las letras mayúsculas y minúsculas son diferenciadas en los nombres de variables.
Ejemplo:
[Alberto Rodriguez] [Carmen
Garcia] [Frank
Quero] [Sabrina
Calderón] [Oleida
Molina]
$LENGUAJE, $lenguaje y $LeNgUaJe son 3 variables distintas.
Otro ejemplo (holavar.pl):
$saludo = "Hola Mundo";
print $saludo;
$saludo = "Adios Mundo";
print $saludo;
$saludo = 100
print $saludo + 10;
Ejecutar para ver el resultado: HolaMundoAdiosMundo110
(¡Todo en una línea! ¡Qué feo queda!)
Vamos a arreglarlo añadiendo un salto de línea con \n al final de cada línea (holasal.pl).
$saludo = "Hola Mundo\n";
print $saludo;
$saludo = "Adios Mundo\n";
print $saludo;
Variables especiales.
$_ Almacena la línea completa que ha sido leido.
$` Almacena la parte situada a la izquierda de un modelo.
$' Almacena la parte situada a la derecha de un modelo.
$& Almacena la parte propia del modelo encontrado.
Ejemplo (varespe.pl):
# Variables especiales
$_ = "Me gustan los mazapanes y el anís";
/ mazapanes /;
print $`, "\n"; # "Me gustan los"
print $', "\n"; # "y el anís"
print $&, "\n"; # "mazapanes"
print $`.$&.$'; # Igual que $_
Variable de edición directa $^I.
Cuando a $^I se le asigna un valor como .bak o .000 el lenguaje activa la edición directa de los archivos que llegan al programa a través del operador <>. Es muy útil para buscar y sustituir cadenas dentro de un grupo de archivos. Estudia el siguiente ejemplo (edicdir.pl):
# Edición directa con Perl
# Busca y reemplaza todas las cadenas html por HTML
# Teclear: Perl edicdir.pl