Programación en Perl/Tipos de datos

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

Tu primer programa
Tema anterior

Tipos de datos
Índice

Estructuras de control
Siguiente tema


Funciones utilizadas
  • print
  • $dato_escalar
  • @lista_de_datos
  • %lista_asociada_de_datos
  • $#cantidad_de_datos
  • my $dato_escalar_declarado
  • 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 (listas asociadas):

  • Un escalar es un solo valor; puede ser un número, un string (cadena de caracteres) o una referencia
  • Una lista es una colección 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.

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',
);

Datos booleanos[editar]

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

Valores Booleanos[editar]

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 aplica

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 el lenguaje C), necesita realizar el cálculo siguiente:

my $resultado_real = $resultado_booleano ? 1 : 0;

Usando escalares[editar]

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

# 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;

Tu primer programa
Tema anterior

Tipos de datos
Índice

Estructuras de control
Siguiente tema