- Un escalar es un solo valor; puede ser un número, un string (cadena de caracteres) o una referencia
- Un lista es una colección ordenada de escalares (una variable que almacena una lista se llama array)
- Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings se llaman claves y los escalares valores.
Todas las variables están precedidas por un sigil, que identifica el tipo de dato que es accedido (no el tipo de dato de la misma variable). Se puede usar el mismo nombre para variables de diferentes tipos, sin que tengan conflictos.
$var # un escalar @var # un ''array'' %var # un ''hash''
[editar] Datos escalares
Los números se escriben de la forma usual; los strings están rodeados entre comillas de varias clases.
$n = 42; $nombre = "juan"; $color = 'rojo';
Perl convertirá los strings en números y viceversa dependiendo del contexto en que sean usados.
Datos array
Una lista se define listando sus elementos, separados por comas y rodeados por paréntesis donde así sea requerido por la precedencia de los operadores.
@puntuaciones = (32, 45, 16, 5);
Datos hash
Un hash puede ser inicializado desde una lista de pares clave/valor.
%favorito = ( joe => 'rojo', sam => 'azul', );
[editar] Datos booleanos
En Perl no existen tales datos, sin embargo cuando se analizan internamente si el dato contiene algun valor diferente de cero Perl lo considera como verdadero.
$fruta = '0'; #Falso $fruta = '5'; #Verdadero $fruta = "5 mangos"; #Verdadero
Ejemplos
Valores Booleanos
Perl también tiene un contexto booleano que utiliza en la evaluación de declaraciones condicionales. Los siguientes valores en Perl se evalúan todos como falso:
$falso = 0; # el número cero $falso = 0.0; # el número cero como flotante $falso = '0'; # el ''string'' cero $falso = ""; # el ''string'' vacío $falso = undef; # el valor devuelto por undef
Todos los demás valores se evalúan a verdadero. Esto incluye el curioso string auto-descriptivo
"0 pero verdadero"
, que de hecho es 0 como número, pero verdadero como booleano. (Cualquier string no numérico también tendrá esta propiedad, pero este string en particular es ignorado por Perl en contextos numéricos). Las expresiones booleanas evaluadas también devuelven valores escalares. Aunque la documentación no indica qué valor particular se devuelve como verdadero o falso (y por lo tanto no fiable), muchos operadores booleanos devuelven 1 por verdadero y el string vacío para falso (que evalúa a cero en contexto numérico). La función defined() le dice si la variable tiene algún valor. Si a cada uno de los valores anteriores se le aplicadefined($falso)
será verdadero con cada uno de los valores anteriores, excepto
undef
.Si, específicamente, quiere asegurarse de tener un resultado 1/0 (como en el lenguaje C), necesita realizar el cálculo siguiente:
my $resultado_real = $resultado_booleano ? 1 : 0;
Usando escalares
En el siguiente ejemplo los datos strings
$n
y $m
son tratados como números cuando son argumentos del operador suma. Este código imprime el número '5', desechando cualquier información no numérica de la operación y dejando los valores de las variables intactos. (El operador de concatenación no es +
, sino .
(el signo de punto).)$n = "3 manzanas"; $m = "2 naranjas"; print $n + $m;
Si en el ejemplo anterior, en vez de el símbolo suma coloca un punto. Se obtiene algo así:
3 manzanas2 naranjas
sin espacio entre el texto concatenado(unido).
Combinando datos escalares, arrays y hashes
Los elementos individuales de una lista son accedidos utilizando un índice numérico, dentro de corchetes. Valores individuales en un hash son accedidos utilizando la correspondiente clave, dentro de llaves. El sigil $ identifica que el elemento accedido es un escalar.
$puntuaciones[2] # un elemento de @puntuaciones $favorito{joe} # un valor de %favorito
Múltiples elementos pueden ser accedidos usando en su lugar el sigil @ (identificando el resultado como una lista).
@puntuaciones[2, 3, 1] # tres elementos de @puntuaciones @favorito{'joe', 'sam'} # dos valores de %favorito
El número de elementos en un array puede ser obtenido evaluando el array en contexto escalar o con la ayuda del sigil $#. Éste último da el índice del último elemento dentro del array, no el número de elementos.
$numero = @amigos; $#amigos; # el índice del último elemento en @amigos $#amigos+1; # normalmente el número de elementos en @amigos, # que es uno más que $#amigos porque el primer # elemento tiene el índice 0, no 1
Funciones sobre datos hashes
Hay unas pocas funciones que operan sobre hashes enteros.
# guarda en el array @nombres_de_clientes # todas las claves del hash %direcciones @nombres_de_clientes = keys %direcciones; # guarda en @direcciones_de_email # todos los valores de %direcciones @direcciones_de_email = values %direcciones;