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 |
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
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.
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>);
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
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
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
Trabajan igual que push() y pop() pero con el comienzo del array.
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
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"
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";}
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"
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
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