PERL I OverView y Bases
Perl es un lenguaje muy completo y resulta dificil describirlo. No establece ninguna filosofía de programación concreta. No se puede decir que sea
orientado a objetos, modular o estructurado aunque soporta directamente todos estos
paradigmas y su punto fuerte son las labores de procesamiento de textos y archivos.
Perl no es un lenguaje compilado ni tampoco interpretado, es un híbrido como Java aunque su comportamiento es totalmente diferente.
El código de Perl se compila a un código interno para guardarse en memoria, que se optimiza como si hicieramos un programa ejecutable, pero a diferencia de cualquier programa ejecutable independiente, el código interno de Perl no puede ser ejecutado directamente por el sistema operativo, sino que debe ejecutarse por un Motor, como si fuese interpretado. Así vemos que en realidad Perl es un híbrido.
VARIABLES:Desde un punto de vista generalizado las variables son prácticamente cualquier estructura a la que se le pueden asignar datos, por eso definiremos como variable también a los arrays (matrices) y hashes (matrices asociadas), a demás de las comunes variables escalares (se llaman así porque no son vectoriales
)
Variables Escalares:Son las variables que sólo contienen un valor, sea numérico o alfanumérico y se comienzan con "$", Las variables de contenido alfanumérico deben encerrarse entre comillas dobles ("") y como siempre en Perl, al terminar una sentencia se usa ";" (punto y coma).
Ejemplos:
#Alfanumericas
$Variable1="Hola";
$Variable2="Mundo";
print "$Variable1 $Variable2";
#Con decimales y notacion cientíafica =P
$ConDecimales=1,2;
$ConNotacion=2,3E4;
$MAL="3,4"; #<- Esto no es un numero sino un alfanumerico
$Hexadecimales=0x1A;
$Octales=038;
Así también podemos hacer asignaciones entre variables, recordando que el operador asignacion significa SIEMPRE que el segundo valor reemplazará al primero, por ejemplo:
$VarB=$VarA;
El contenido de la variable VarB
SE PERDERA y se reemplazará por el contenido de VarA. Eso viene desde las bases de los lenguajes de máquina y se repite en todos los lenguajes. Si lopensamos en función de posiciones en la memoria veremos que:
A=B
Significa que el contenido de la posicion B se asignará a la posicion A, borrando todo lo que exista allí. En Perl es algo diferente ya que podemos hacer asignaciones entre diversos tipos de variables, lo que significa que en memoria ésto se tratará de manera diferente ya que a bajo nivel no está permitido asignar una variable de un tipo a una de otro tipo (Programadores de Assembly o lenguajes como C me entenderán).
ASIGNAR E INTERPOLAR:
Podemos usar variables para crear otras variables interpoladas. Eso nos facilita procesar y mostrar la información de manera sencilla. Para hacerlo en C o C++ deberíamos usar algunas formas específicas, igual en lenguajes como pascal e incluso en lenguajes sencillos como javascript, debemos inteerpolar usando construcciones como:
var Nueva='Hola don '+Nombre+', esperamos disfrute su visita...\n';
Sin embargo en Perl es mucho más sencillo, veamos:
$Apellido="Perez";
$Mensaje="Hola don $Apellido, esperamos disfrute su visita\n";
Así de sencillo.
ADICION Y CONCATENACION CRUZADA:
En Perl una variable alfanumérica puede actuar como numérica o viceversa. Al realizar operaciones de éste tipo debemos usar éstas formas con los operadores "
+" y "
.".
$NUMERO=2;
$ALFANUM="3";
# Sumar numero más alfanumérica
$SUMA=$NUMERO+$ALFANUM; # Es Faaacil XD - $SUMA ahora vale 5
#Concatenar un número y una cadena
$CONCAT=$NUMERO.$ALFANUM; # Ahora $CONCAT vale "23"
Ésto nos permite obtener un valor desde una cadena (pe: Leyendo un fichero) y usarlo para operaciónes matemáticas, para después devolverlo a una cadena de salida xD.
Una operación más avanzada es la asignación múltiple de variables. Con este método podemos realizar varias asignaciónes juntas, evitando renglones que dificulten la lectura del código.
Pe: Ésta asignación...
$Var1=$NUMERO;
$Var2=$ALFANUM;
$Var3=$OTRA_VARIABLE;
Se puede hacer mucho más simple así:
($Var1,$Var2,$Var3)=($NUMERO,$ALFANUM,$OTRA_VARIABLE);
Observen que se usan paréntesis
() que no se ven muy bien con el resaltado, y los valores se separan con comas "
,".
Variables de Matrices (Arreglos, Vectores, Arrays):Éste tipo de variables es en realidad una matríz de variables. Para aquellos que no conozcan lo que son vectores o matrices, imagínenlas como listas en las que cada objeto listado es una variable.
Los Arrays () o matrices se definen usando el carácter "
@" (arroba).
Veamos un ejemplo en el que definiremos una matríz de 3 valores.
@Animales=("Perro", "Gato", "Caballo");
Así accedemos a los valores por referencia, comenzando desde 0 (cero) y, en éste caso, hasta 2 (dos). Vamos a mostrar la lista por la pantalla.
@Animales=("Perro", "Gato", "Caballo");
print "Primer valor - $Animales[0]\n"; print "Segundo valor - $Animales[1]\n"; print "Ultimo valor - $Animales[2]\n";
Éste código puede ser muy mejorado si usamos un bucle, pero eso lo veremos más adelante.
Podemos introducir variables o matrices dentro de una matríz:
@Anim1=("Perro", "Gato", "Caballo");
$OTRO="Ornitorrinco";
@Animales=(@Anim1,$OTRO,"Jirafa","La suegra");
Ahora veamos los métodos clásicos de operación de los Arrays, que son métodos que nos facilitan operar con los elementos de un array.
PUSH:
Sirve para colocar un elemento al final de la matríz, y se usa así:
push(@matriz, "Valor")@matriz es la matríz en la que queremos introducir el "Valor". Éste valor puede ser un número, una variable escalar, u otra matríz.
Un Ejemplo:
@Matriz=("Uno", "Dos");
@OtraMatriz=("Tres", "Cuatro");
push(@Matriz, @OtraMatriz);
POP:
Quitar el último valor de la matríz. Aplicado a la matríz anterior quitaría el valor "Cuatro", y lo devuelve, por lo que lo podemos meter en otra variable. Veamos;
$ValorSacado=pop(@OtraMatriz); print "Saque el valor $ValorSacado\n";
Ahora quedan los valores "Uno" "Dos" y "Tres".
UNSHIFT:
Nos permite reemplazar el primer valor de una matriz, aplicado a la matriz anterior sería:
Cambiaría el "Uno" por "Unito".
SHIFT:
Quita el primer valor de la matriz, desplazando a los demás un lugar, por ejemplo:
Dejaría los valores a partir de "Dos" y sacaría el "Unito". Tal y como POP , éste método devuelve el valor sacado de manera que lo podamos usar.
Podemos conocer el último índice de un array usando una notación especial, el "
$#". Por ejemplo si quisieramos conocer cuál es el último índice de nuestra matríz sería:
$ULTIMO_INDICE=$#Matriz;
Variables de Matrices Asociadas o Hashes:Éste último tipo es conocido como tablas de hash y se notan con el símbolo "
%". Es similar a las matrices comúnes pero cada valor se referencia por una clave, que es una palabra, y no por un número. Hay dos modos de inicializar el hash, donde la primera es poco visible.Veamos un ejemplo:
PRIMER CASO
%Numeros(Uno, 1, Dos, 2, Tres, 3, Cuatro, 4);
SEGUNDO CASO
%Numeros(
Uno=>1,
Dos=>2,
Tres=>3,
Cuatro=>4
);
En ambos casos las claves son Uno, Dos, Tres y Cuatro, pero el segundo es más visible. Ahora para referenciar los valores usamos llaves en vez de corchetes, y claves en vez de números, así:
$Numeros{Dos}; # Nos da el 2
Y podemos asignar valores de a uno así:
$Numero{Uno}=9; # Cambia el 1 por un 9;
$Numero{"tres"}=50; # Tambien se pueden usar comiilas dobles.
Como los Arrays, los Hashes tienen sus métodos para operar de diferenctes maneras con ellos:
delete(
$matriz{clave})
-Borra
EL PAR COMPLETO clave/valor del hash..
values(
%hash)
-Muestra
LOS VALORES del hash (no las claves) SIN ORDENARLAS.
keys(
%hash)
-Muestra
LAS CLAVES de un hash.
each(
%hash)
-Muestra solo un par clave/valor del hash que pusimos como parámetro.
exists $hash{clave}
-Si existe la clave en el hash %hash la funcion devuelve 1.
defined $hash{clave}
-Si la clave existe o simplemente está definida, devuelve 1.
Existe una función extra que podemos usar como filtro para ordenar valores: sort.
Por ejemplo, si queremos mostrar las claves de un hash de forma ordenada debemos usar:
Esto culmina nuestro primer capítulo. Ahora sabemos las bases de Perl, y podemos comenzar a trabajar con ficheros y tratamientos para darnos cuenta de cuántas utilidades le podemos dar a éste lenguaje.