Usuario:Oleinad/perl/Tipos de datos

De Wikilibros, la colección de libros de texto de contenido libre.

Plantilla:Navegador2

Funciones utilizadas
  • $dato
  • @datos
  • %datos
  • $#datos
  • my $dato
  • keys
  • values
  • defined
  • undef
Conceptos implicados
  • Datos escalares
  • Datos array (Listas)
  • Datos hash (Listas asociativas)
  • Strings (Cadenas)
  • Valores booleanos

Tipos de datos[editar]

Perl tiene tres tipos de datos: escalares, listas y hashes:

  • 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''

Datos escalares[editar]

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.

En el siguiente ejemplo los strings $n y $m son tratados como números cuando son argumentos del operador suma.

ejercicio
ejercicio

El operador suma usado en print.


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 ..)

$n     = "3 manzanas";
$m     = "2 naranjas";
print $n + $m;
ejercicio
ejercicio

El operador concatenación usado en print.


Del ejemplo anterior, en vez de el símbolo suma coloca un punto. ¿Que obtienes?

Perl también tiene un contexto booleano que utiliza en la evaluación de declaraciones condicionales. Los siguientes valores en Perl 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. En el ejemplo anterior defined($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 C), necesita realizar el cálculo siguiente:

my $resultado_real = $resultado_booleano ? 1 : 0;

Datos array[editar]

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[editar]

Un hash puede ser inicializado desde una lista de pares clave/valor.

%favorito = (
      joe => 'rojo',
      sam => 'azul',
);

Combinando datos escalares, arrays y hashes[editar]

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[editar]

Hay unas pocas funciones que operan sobre hashes enteros.

@nombres_de_clientes  = keys   %direcciones;   # guarda en @nombres_de_clientes
                                               # todas las claves  de %direcciones
@direcciones_de_email = values %direcciones;   # guarda en @direcciones_de_email 
                                               # todos los valores de %direcciones

Plantilla:Navegador2