4.1. Matrices @ Se definen con el símbolo @ como primer carácter para diferenciarlas de las variables escalares. Contienen listas de objetos que no tienen que ser del mismo tipo. Ejemplos: Estudia el siguiente ejemplo (matrices.pl): # Define la matriz @fruta
con tres elementos # Agrega otra fruta al
final de la lista # Agrega otra fruta al
final de la lista (de otra forma) #¿Los vemos todos
juntitos? # Creamos una nueva tabla. # Agregamos la tabla dias
como último elemento de la de frutas ¡Es posible! print "\n"; #
Esto ya sabes para que es. print "\n"; # Ni
te lo cuento para que sirve. print "\n"; #
...ZZZZ.zzzz.... Las líneas anteriores se encuetran en (matrices.pl). Un ejemplo trabajando con los elementos de una matriz (matrice2.pl): # Trabajando con los elementos de una matriz. @matriz =
("enero", "febrero",
"marzo"); #Define @matriz con 3 meses. 4.2. Matrices asociativas. Una matriz asociativa está indexada por cadenas en lugar de por números. Se utiliza % para definir el tipo de matriz asociativa y un elemento está indexado por el anterior formando ambos parejas del tipo indice=valor. Un ejemplo sencillo con una matriz asociativa (matrasoc.pl): %campos =
("nombre", "Ana", "calle",
"Andalucia 1", "edad",
"56"); print $tutodoes; #Ana de Andalucia 1 con 56 años $campos{"sexo"}
= "mujer"; #Añade el campo sexo con el dato
mujer $tutodoes = $tutodoes." y es ".$tusexoes; print "\n"; Un ejemplo para pasar una matriz @ en una matriz %: @articulos =
("X", "Martillo", "Y",
"Alicates", "Z", "Tenazas") 4.3. Foreach(), Keys() y Each(). Ejemplo usando foreach para recorrer los elementos de una matriz hasta el final, la función keys() para acceder a los índices de una matriz asociativa y también la función each() que se presenta como la forma más lógica de acceder a los índices y a los valores de una matriz asociativa (matrasc2.pl): # Recorre e imprime una matriz @ con foreach. @meses = ("I",
"ene", "II", "feb",
"III", "mar"); # Ahora dejando un espacio en blanco entre los elementos. foreach $lee (@meses) { # Ahora crea una matriz % de una matriz @. %mensualidades = @meses; # Ahora usa keys() para
leer los elementos indices de una matriz % @indices =
keys(%mensualidades); # Otra forma de imprimir los indices pero usando foreach foreach $lee
(keys(%mensualidades)) { # Por último hacemos con
la matriz % lo que hicimos con la @, foreach $lee
(keys(%mensualidades)) { # Imprime I --> ene II --> feb III --> mar # Podemos recorrer una
matriz asociativa con un bucle while() y while (($indice, $valor) =
each(%mensualidades)) { # Imprime I=ene II=feb III=mar 4.4. Split(). Usar Split() para convertir cadenas en listas de datos. # Un ejemplo de Split() para convertir cadenas en listas $cadena= "empresa=Donuts&producto=Donettes&precio=100"; @tabla = split(/&/, $cadena); #Divide la cadena usando & print $tabla[0],
"\n"; #empresa=Donuts # Split con $_ $_ = "Mañana vienen los Reyes Magos"; print "\n"; 4.5. Join(). La función Join() agrupa todos los elementos de una matriz dentro de una cadena y conecta los elementos con un delimitador específico. Ejemplo: 4.6. Hex() y Pack(). Hex() convierte un número en base 10 a base 16 y Pack() es un convertidor de tipos que ofrece varias opciones de conversión. La función Pack toma dos parámetros para realizarlo: una plantilla, o instrucción para el tipo de conversión a realizar, y una lista de números decimales para convertir. Estas dos funciones son muy útiles para convertir datos procedentes de formularios de Web. Todos los caracteres de control, de puntuación y signos llegan en formato hexadecimal al servidor y necesitan convertirse al formato ASCII. Plantillas y Tipo de número Ejemplos: $letra =
pack("C", 65); #Convierte 65 en un carácter
ASCII $letra = hex(41);
#Convierte 41 en hex a 65 en decimal $crlf =
pack("CC", hex("0D"),
hex("0A")); #Salto de línea 4.7. Chop(). Concatena cadenas eliminando el carácter de nueva línea. Perl ajusta la función chop para cada plataforma. En UNIX, la nueva línea es 10 ASCII (el \n de Perl); en Mac es 13 ASCII; y en DOS (y Windows), es 13 ASCII más 10 ASCII. Tanto si consta de uno o de dos caracteres, en cada caso, chop elimina el carácter o caracteres de nueva línea. Ejemplo (chop.pl): while (<STDIN>) { 4.8. Index(). Busca la situación de una subcadena dentro de una cadena. Sintaxis: index($Cadena, $Subcadena [,Desplazamiento]) $cadena es la cadena dónde se busca la $subcadena y Desplazamiento es opcionalmente el número de caracteres desde el inicio que se ignoran en la búsqueda. Ejemplo: $posicion almacena el número de posición de comienzo de la subcadena dentro de la cadena, teniendo en cuenta que el primer caracter de la cadena es la posición cero. Si el resultado es -1 no se ha encontrado la subcadena. 4.9. Rindex(). Busca hacia atrás la situación de una subcadena dentro de una cadena. Sintaxis: rindex($cadena, $subcadena [,Desplazamiento]) $cadena es la cadena dónde se busca la $subcadena y Desplazamiento es opcionalmente el número de caracteres desde el inicio que se ignoran en la búsqueda. Ejemplo: 4.10. Length(). Lenght() devuelve la longitud de una cadena. Ejemplo: 4.11. Substr(). Devuelve una subcadena extrayéndola de una cadena partiendo de una posición inicial y una longitud determinadas. Sintaxis: $subcadena = substr($cadena, inicio [,longitud]) Ejemplo: 4.12. Push(), Unshift(), Pop(), Shift() y Delete(). Push() Añade elementos al final de
una matriz. # Agregar y eliminar elementos en una matriz @matriz =
("uno", "dos", "tres");
#Define matriz con tres elementos 4.13. Sort() y Reverse(). Sort ordena los elementos de una matriz. Ejemplo (matrice4.pl): @Matriz =
("d","a","c","b"); Reverse invierte el orden de los elementos de una matriz. Ejemplo: 4.14. Values(). Visualiza los elementos valores de una matriz asociativa. Ejemplo (values.pl): %lenguajes = ( 1,
"HTML", 2, "PERL", 3,
"JAVA", 4, "JAVASCRIPT"); 4.15. Die(). La función die() cuando se realiza una operación de acceso a un archivo, y ésta produce un error, termina inmediatamente la ejecución del programa y envía un mensaje de error a STDERR (la salida estándar para los errores). Es el último recurso que se tiene para informar de que algo ha ido mal. Se suele usar conjuntamente con el operador especial or-else (o de lo contrario) que se representa con dos barras verticales ||. Delante de la primera barra se indica qué hacer y después de la segunda qué hacer en caso de no realizarse lo primero. Ejemplo (die.pl): open (FHANDLE,
"saludo.txt") || die "No puedo abrir
archivo"; die ("Ya he terminado de trabajar."); 4.16. Grep(). Grep busca coincidencias de modelos en una matriz. Sintaxis: @encontrado = grep(/expresión/, matriz); @encontrado contendrá la lista de coincidencias. Ejemplo (grep.pl): # Con la función grep()
podemos buscar enlaces del tipo http://www... @lista = ("Enlace 1: http://www.u.es ","texto","Enlace 2: http://www.d.es "); # @enlaces almacena los elementos de @lista donde existe un enlace. @enlaces = grep(/http:\/\/www\..* /i, @lista); # Visualiza los elementos donde existe un enlace. $numenlaces = @enlaces; # Visualiza sólo los enlaces omitiendo el texto a derecha e izquerda. print "\n"; |