# Programación en Perl/Tipos de datos

* print
* $dato_escalar
* @lista_de_datos
* %lista_asociada_de_datos
* $#cantidad_de_datos
* my $dato_escalar_declarado
* keys
* values
* defined
* undef
* Datos escalares
* Datos array (Listas)
* Datos hash (Listas asociativas)
* Strings (Cadenas)
* Valores booleanos

# Tipos de datos

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.

## Datos escalares

Los números se escriben de la forma usual; los strings están rodeados entre comillas de varias clases.
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.

## Datos hash

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

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

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

## 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).)
Si en el ejemplo anterior, en vez de el símbolo suma coloca un punto. Se obtiene algo así:
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.
Múltiples elementos pueden ser accedidos usando en su lugar el sigil @ (identificando el resultado como una lista).
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.

## Funciones sobre datos hashes

Hay unas pocas funciones que operan sobre hashes enteros.