← Perl EspañolChapter 02 of 13

Variables

## Objetivos de Aprendizaje - Comprender los tipos de variables en Perl - Trabajar con variables escalares - Usar arreglos y listas - Usar hashes (arreglos asociativos) - Comprender referencias - Trabajar con typeglobs ## Tipos de Variables | Tipo | Prefijo | Ejemplo | |------|---------|---------| | Escalar | `$` | `$nombre`, `$edad` | | Arreglo | `@` | `@nombres`, `@numeros` | | Hash | `%` | `%datos`, `%config` | | Typeglob | `*` | `*archivo` | | Referencia | `\` | `\$escalar`, `\@arreglo` | ## Variables Escalares ### Declaracion y Asignacion ```perl use strict; use warnings; my $nombre; # Declaracion $nombre = "Alice"; # Asignacion my $edad = 30; # Declaracion + Inicializacion my $precio = 19.99; # Punto flotante my $cuenta = undef; # Valor indefinido ``` ### Escalares de Cadena ```perl my $nombre = "Alice"; my $saludo = 'Hola'; # Comillas simples - sin interpolacion my $mensaje = "Hola, $nombre!"; # Comillas dobles - interpolacion my $escapado = "Ella dijo \"Hola\""; # Caracteres de escape my $concat = "Hola " . "Mundo"; # Concatenacion ``` ### Escalares Numericos ```perl my $entero = 42; my $flotante = 3.14; my $cientifico = 1.5e10; my $hex = 0xFF; # Hexadecimal (255) my $octal = 0777; # Octal my $binario = 0b1010; # Binario (10) ``` ### Valores Undef ```perl my $indefinido; print defined($indefinido) ? $indefinido : "indefinido"; $indefinido = 5; print defined($indefinido) ? $indefinido : "indefinido"; ``` ## Variables de Arreglo ### Declaracion ```perl use strict; use warnings; my @numeros; # Arreglo vacio my @nums = (1, 2, 3, 4, 5); # Arreglo con valores my @mixed = ("a", 1, "b", 2); # Tipos mixtos my @rango = (1 .. 10); # Operador de rango (1 a 10) my @letras = ('a' .. 'z'); # Rango de letras ``` ### Operaciones con Arreglos ```perl my @colores = ("rojo", "verde", "azul"); # Acceder a elementos (indice base 0) print $colores[0]; # "rojo" print $colores[-1]; # "azul" (ultimo elemento) # Longitud del arreglo print scalar @colores; # 3 print $#colores; # 2 (ultimo indice) # Asignacion $colores[3] = "amarillo"; # Agregar elemento $colores[0] = "purpura"; # Modificar elemento ``` ### Rebanadas de Arreglos ```perl my @nums = (1 .. 10); my @primeros_tres = @nums[0, 1, 2]; # (1, 2, 3) my @rebanada = @nums[2 .. 5]; # (3, 4, 5, 6) ``` ### Push, Pop, Shift, Unshift ```perl my @pila = (1, 2, 3); push @pila, 4; # (1, 2, 3, 4) my $sacado = pop @pila; # Remueve 4, retorna 4 unshift @pila, 0; # (0, 1, 2, 3) my $desplazado = shift @pila; # Remueve 0, retorna 0 ``` ## Variables Hash ### Declaracion de Hash ```perl use strict; use warnings; my %vacio; # Hash vacio my %persona = ( nombre => "Alice", edad => 30, ciudad => "Boston" ); # El orden no esta garantizado (pre Perl 5.26) ``` ### Accediendo a Elementos ```perl my %persona = ( nombre => "Alice", edad => 30, ciudad => "Boston" ); print $persona{nombre}; # "Alice" print $persona{edad}; # 30 # Modificar $persona{edad} = 31; $persona{email} = "alice@example.com"; ``` ### Funciones de Hash ```perl my %persona = (nombre => "Alice", edad => 30); # Claves y valores my @claves = keys %persona; # ("nombre", "edad") my @valores = values %persona; # ("Alice", 30) # each (iteracion) while (my ($clave, $valor) = each %persona) { print "$clave => $valor\n"; } # Verificar existencia if (exists $persona{edad}) { print "La edad existe\n"; } # Eliminar delete $persona{edad}; # Tamano my $tamano = scalar keys %persona; # Numero de claves ``` ## Referencias ### Creando Referencias ```perl my $escalar = 42; my @arreglo = (1, 2, 3); my %hash = (a => 1, b => 2); my $ref_escalar = \$escalar; my $ref_arreglo = \@arreglo; my $ref_hash = \%hash; # Referencias anonimas my $arreglo_anon = [1, 2, 3]; my $hash_anon = { a => 1, b => 2 }; ``` ### Desreferenciando ```perl my @colores = ("rojo", "verde", "azul"); my $colores_ref = \@colores; # Desreferenciar para obtener el original my @copia = @$colores_ref; my $primero = $colores_ref->[0]; my %datos = (x => 10, y => 20); my $datos_ref = \%datos; my %copia = %$datos_ref; my $val = $datos_ref->{x}; ``` ### Referencia a Funciones ```perl sub saludar { my ($nombre) = @_; print "Hola, $nombre!\n"; } my $saludar_ref = \&saludar; $saludar_ref->("Alice"); ``` ## Estructuras de Datos Complejas ```perl use strict; use warnings; use Data::Dumper; # Arreglo de hashes my @usuarios = ( { nombre => "Alice", edad => 30 }, { nombre => "Bob", edad => 25 }, ); print $usuarios[0]{nombre}; # "Alice" # Hash de arreglos my %puntuaciones = ( Alice => [95, 87, 92], Bob => [88, 91, 85], ); print $puntuaciones{Alice}[0]; # 95 # Referencia profunda my $complejo = { usuarios => [ { nombre => "Alice", puntuaciones => [95, 87] }, ], }; print $complejo->{usuarios}[0]{puntuaciones}[0]; # 95 ``` ## Typeglobs ### Uso Basico ```perl use strict; use warnings; my $escalar = "hola"; my @arreglo = (1, 2, 3); # Typeglob - acceder a todos los tipos con el mismo nombre print *$escalar; # "hola" print *$arreglo[0]; # 1 # Crear alias *otro_nombre = \$escalar; print $otro_nombre; # "hola" ``` ### Typeglob de Filehandle ```perl use strict; use warnings; # STDOUT es un typeglob print STDOUT "Hola\n"; print STDERR "Error\n"; ``` ## Alcance de Variables ```perl use strict; use warnings; my $global = "externo"; { my $interno = "alcance interno"; print $global; # Accesible print $interno; # Accesible } # print $interno; # Error - fuera de alcance ``` ## Resumen - Las variables escalares (`$`) contienen valores simples - Las variables de arreglo (`@`) contienen listas ordenadas - Las variables hash (`%`) contienen pares clave-valor - Las referencias (`\`) crean punteros a variables - Usa `->` para acceder a datos referenciados - Los arreglos anonimos usan `[ ]`, los hashes usan `{ }` - `my` crea variables lexicas (con alcance) - Siempre usa `use strict` y `use warnings`

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →