Operadores

Operadores de Perl

Perl define los siguientes operadores para el manejo de datos escalares, cadenas de texto y operaciones aritméticas. La siguiente tabla muestra los operadores más importantes por orden de prioridad:

Operador Asociación Descripción
++ y -- ninguna Incremento y decremento automático. Si se antepone a la variable, la incrementa/decrementa antes de evaluar, y si se pospone, incrementa/decrementa después de evaluar.
! ~ // derecha Negación lógica, negación a nivel de bit, delimitación de un patrón regular
=~ !~ izquierda Indica que a la variable a su izquierda le afectará un proceso de búsqueda o sustitución por patrones regulares.=~ sustituy por el resutado y !~ por el resultado negado
** * / % x izquierda Exponenciación, multiplicación, división, módulo y repetición de cadenas. El operador x repite la cadena a su izquierda tantas veces le indique el número de su derecha.
+ - . izquierda Suma, resta y concatenación de cadenas
< > <=>= ninguna Mayor que, menor que, mayor o igual que, menor o igual que
==!=<=> ninguna Igual que, distinto que, compara. El operador <=> devuelve -1, 0 ó 1 dependiendo si el valor a su izquierda es menor, igual o mayor que el de la derecha. Se comporta igual que la función strcmp de C.
& izquierda AND a nivel de bit de los operandos
| ^ izquierda OR y XOR a nivel de bit de los operandos
&& izquierda AND lógica de dos operandos
|| izquierda OR lógica AND lógica de dos operandos
.. ninguna Operador de rango
?: derecha Operador ternario if...then...else
+=-==etc derecha Operadores de automodificación. +=pospuesto a una variable, y antepuesto a un número, suma el número a la variable
,=> izquierda Evalúa la expresión de su derecha y devuelve el resultado de la operación de su izquierda (a=( i=3), (i + j); termina con a=j + 3). El operador => es esencialmente igual que , pero es exclusivo de Perl 5.
not izquierda Negación de baja prioridad
and izquierda AND de baja prioridad
or izquierda OR de baja prioridad
xor izquierda XOR de baja prioridad

Otros operadores:

Operadores para variables escalares

Operador print()

Toma el valor de una variable y la imprime en el archivo especificado. Si no se le pasa un descriptor de fichero específico, utiliza la salida estándar (STDIN). Se le puede pasar una cadena de caracteres entre comillas dobles (""), y se pueden utilizar los paréntesis o no. Los parametros se separan mediante un espacio en blanco. En las cadenas de caracteres encerradas por "" evalúa el significado de caracteres especiales, como \n, y en las encerradas por comillas simples, los imprime tal cual. Ejemplos:

print "Escritura de una cadena\n"; # imprime por pantallaEscritura de una cadena
                                                          # seguido por un salto de linea
print 'Escritura de una cadena\n'; # imprime en la pantallaEscritura de una cadena\n


Operador printf()

Se utiliza para imprimir datos formateados, y funciona igual que la función printf() del lenguaje C. Ejemplo:

printf " %10s %5d % 8.3f \n" ,$cadena,$entero,$decimal;
Interpretación: %10s -- imprime los 10primeros caracteres de $cadena, %5d -- $entero se escribe en un campo de 5 dígitos, %8.3f-- $decimal es un número en coma flotante, del que se imprimen 8 dígitos de su parte entera y 3 de su parte decimal.


Operador chop()

Toma la cadena incluída en la variable pasada como parámetro y elimina su último caracter. No devuelve ningún valor, sino que modifica el contenido de la variable pasada como parámetro. Por ejemplo:

$cadena="Buenos dias";
chop ($cadena);
print $cadena; # Imprime Buenos dia

Es muy útil para recoger una cadena del teclado y eliminar el salto de línea:
print "Introduce tu nombre: \n";
chop($nombre=<STDIN>);


Operador tr()

Es un operador de sustitución de caracteres por búsqueda de patrones regulares en una cadena. En los CGIs es muy útil para convertir los caracteres + utilizados para representar los espacios en blanco de los valores de las variables:

$valor=~ tr /+/ /; # sustituye en la cadena $valor los "+" por " "
$_cadena=~ tr /[a-z]/[A-Z]/; # cambia las minúsculas por mayúsculas en toda la cadena


Operador s()

Sustituye cadenas de caracteres en una cadena por búsqueda de patrones regulares:
$cadena=~ s /rojo/verde/g; # sustituye todas las apariciones de rojo por verde en $cadena


Operadores para arrays

Operadores push() y pop()

Para utilizar un array como una pila en la que el último elemento en entrar es el primero en salir, se utilizan estos dos operadores.
El operador push() introduce un elemento en el array.

@pila=(1, 2, 3, 4);
$nuevo=5;
push (@pila, $nuevo); # @pila contiene 1 2 3 4 5

El operador pop() devuelve el último elemento introducido en el array. Si el array está vacío devuelve un valor indefinido.

@pila=(1, 2, 3, 4);
$viejo=5;
push (@pila, $viejo); # @pila contiene 1 2 3 4 5
$nuevo=pop(@pila);# @pila contiene 1 2 3 4 y $nuevo 5


Operadores shift() y unshift()

Trabajan igual que push() y pop() pero con el comienzo del array.


Operador reverse()

Invierte el orden de los elementos de un array:

@lista1=(1,2,3,4,5,6,7,8,9);
@lista2=reverse (@lista1);
# @lista2 contiene 9,8,7,6,5,4,3,2,1


Operador sort()

Ordena los elementos de un array de menor a mayor teniendo en cuenta el valor de los caracteres ASCII de los elementos del array pasado como parámetro.

@nombres=sort("Javier","Pablo","Alberto"); # @nombres="Alberto", "Javier", "Pablo"


Operadores para arrays asociativos

Operador keys()

Devuelve un array con las claves que identifican cada valor del array asociativo que se le ha pasado. Si se le pasa un array vacío, devuelve una cadena vacía. Se puede prescindir de los paréntesis.

%cadena=("dni","2356915","asignatura","Tecnologia Web");
@variables=keys (%cadena);
# Obtiene: "dni","asignatura"

También se puede utilizar para averiguar el número de pares variable-valor de un array asociativo. Es muy útil para saber en número de variables que se nos pasa si se trata de un CGI y para saber si el array está vacio o no:

%cadena=("dni","2356915","asignatura","Tecnologia Web");

if (keys %cadena) {
    @variables=keys (%cadena);
# resto de código
}
else { print "Error: la cadena está vacía\n";}


Operador values()

Al igual que el operador keys() devuelve las claves de los valores recogidos en un array asociativo, el operador values() devuelve un array con los valores de las claves ordenados según lo estén estas.

%cadena=("dni","2356915","asignatura","Tecnologia Web");
@consulta=values %cadena;
# recoge "2356915","Tecnologia Web"


Operador each()

Devuelve una lista con los valores de una clave y su valor de un array asociativo. Por ejemplo:

%array=("dni","2356915","asignatura","Tecnologia Web");
while (@par=each(%array)){
print $par[0], "=", $par[1], "\n"; }

imprimiría:

asignatura=Tecnologia Web
dni=2356915


Operador delete()

Elimina un par clave-valor de un array asociativo y devuelve el valor del par borrado.

%array=("dni","2356915","asignatura","Tecnologia Web");
$valor=delete $array{"dni"};
# %array solo contiene "asignatura","Tecnologia Web"
print " dni=$valor "; # imprime dni=2356915



AnteriorSiguiente