← Perl EspañolChapter 12 of 13

Cadenas

## Objetivos de Aprendizaje - Dominar la manipulacion de cadenas - Usar funciones de cadena - Trabajar con Unicode - Formatear cadenas - Usar here-documents ## Basicos de Cadenas ### Comillas Simples ```perl use strict; use warnings; my $str = 'Hola, Mundo!'; my $escapado = 'Ella dijo \'Hola\''; # Escapar comillas simples my $barra = 'C:\\Archivos de programa'; # Barra invertida simple ``` ### Comillas Dobles ```perl use strict; use warnings; my $nombre = "Alice"; my $saludo = "Hola, $nombre!"; # Interpolacion my $calc = "2 + 2 = @{[(2+2)]}"; # Expresiones en cadenas my $array_ref = [1, 2, 3]; my $texto = "Arreglo: @$array_ref"; # Desreferenciar ``` ### Operador qq// ```perl use strict; use warnings; # qq{} es cadena de comillas dobles my $texto = qq{Hola, $nombre!}; # Util para cadenas con comillas my $html = qq{Clic}; ``` ## Funciones de Cadena ### length ```perl use strict; use warnings; my $str = "Hola"; print length($str); # 5 # Longitud Unicode use encoding 'utf8'; my $unicode = "Hola"; print length($unicode); # Puede variar con Unicode ``` ### substr ```perl use strict; use warnings; my $str = "Hola, Mundo!"; # substr EXPR, OFFSET, LONGITUD my $parte = substr($str, 0, 5); # "Hola" my $parte = substr($str, 7); # "Mundo!" # Reemplazar en lugar substr($str, 0, 5) = "Hi"; # "Hi, Mundo!" ``` ### index y rindex ```perl use strict; use warnings; my $str = "Hola, Mundo! Hola de nuevo."; my $pos = index($str, "Mundo"); # 7 my $pos = index($str, "Hola"); # 0 (primera) my $pos = rindex($str, "Hola"); # 14 (ultima) # Con posicion inicial my $pos = index($str, "o", 5); # 8 ``` ### lc, uc, lcfirst, ucfirst ```perl use strict; use warnings; my $str = "Hola, Mundo!"; print lc($str); # "hola, mundo!" print uc($str); # "HOLA, MUNDO!" print lcfirst($str); # "hola, Mundo!" print ucfirst($str); # "Hola, Mundo!" ``` ### capitalize (POSIX) ```perl use strict; use warnings; use POSIX qw(toupper tolower); my $str = "hola"; # Capitalizar manual my $cap = ucfirst(lc($str)); # "Hola" # Usando POSIX print toupper("a"); # "A" print tolower("A"); # "a" ``` ## Manipulacion de Cadenas ### split ```perl use strict; use warnings; my $linea = "manzana,banana,cereza"; my @frutas = split /,/, $linea; # ("manzana", "banana", "cereza") # Con limite my @partes = split /:/, "a:b:c:d", 2; # ("a", "b:c:d") # Split en espacio en blanco my $texto = "uno dos tres"; my @palabras = split /\s+/, $texto; # ("uno", "dos", "tres") ``` ### join ```perl use strict; use warnings; my @palabras = ("Hola", "Mundo"); my $oracion = join "-", @palabras; # "Hola-Mundo" my $csv = join ",", @frutas; ``` ### chomp y chop ```perl use strict; use warnings; # chomp elimina nueva linea final my $linea = ; chomp $linea; # Elimina \n # chop elimina ultimo caracter my $str = "Hola"; chop $str; # "Hol" ``` ### tr/// (Transliteracion) ```perl use strict; use warnings; my $str = "hola"; $str =~ tr/a-z/A-Z/; # "HOLA" # Contar my $count = ($str =~ tr/a//); # Contar 'a's # Eliminar my $limpio = $str =~ tr/a-z//cdr; # Eliminar no minusculas ``` ## sprintf ```perl use strict; use warnings; # sprintf FORMATO, LISTA my $formateado = sprintf("%05d", 42); # "00042" my $formateado = sprintf("%.2f", 3.14159); # "3.14" my $formateado = sprintf("%10s", "Hola"); # " Hola" # Multiples valores my $linea = sprintf("%-10s %5d", "Alice", 30); ``` ### Especificadores de Formato | Especificador | Descripcion | |---------------|-------------| | `%d` | Entero | | `%f` | Flotante | | `%s` | Cadena | | `%x` | Hex | | `%o` | Octal | | `%b` | Binario | ### Banderas de Formato ```perl sprintf("%05d", 42); # "00042" (rellenar con ceros) sprintf("%-10s", "Hi"); # "Hi " (alinear izquierda) sprintf("%+d", 42); # "+42" (forzar signo) sprintf("%.3f", 3.14); # "3.140" (precision) ``` ## Here-Documents ### Here-Doc Basico ```perl use strict; use warnings; my $texto = <<"FIN"; Esto es un here-document. Multiples lineas son soportadas. Variables como $nombre funcionan. FIN print $texto; ``` ### Here-Doc de Comillas Simples ```perl use strict; use warnings; my $texto = <<'FIN'; Esto NO es interpolado. $nombre permanece como literal. FIN print $texto; ``` ### Here-Doc con Identificador Entre Comillas ```perl use strict; use warnings; # Estilo shell (sin comillas) my $sh_texto = < manzana) my $resultado = "manzana" cmp "manzana"; # 0 (igual) # Para ordenar my @ordenado = sort { $a cmp $b } ("banana", "manzana", "cereza"); ``` ## Plantillas de Cadenas ### Plantilla con Marcadores ```perl use strict; use warnings; use Template; my $plantilla = Template->new(); my $vars = { nombre => "Alice", edad => 30 }; $plantilla->process(\ <<'FIN', $vars); Nombre: [% nombre %] Edad: [% edad %] FIN ``` ## Rendimiento de Cadenas ### Concatenacion de Cadenas ```perl use strict; use warnings; # Bueno para pocas concatenaciones my $str = "Hola" . " " . "Mundo"; # Para muchas concatenaciones, usar join my @partes = (); for my $i (1 .. 1000) { push @partes, "Item $i"; } my $resultado = join "\n", @partes; ``` ### String::XS ```perl # Para operaciones de cadena criticas en rendimiento use String::XS; ``` ## Resumen - Comillas simples para cadenas literales, comillas dobles interpolan - `qq{}` es sintaxis alternativa de comillas dobles - `substr`, `index`, `length` para operaciones basicas - `split` y `join` para dividir/combinar - `sprintf` para salida formateada - Here-documents para cadenas de multiples lineas - Usar pragma `utf8` para Unicode - `tr///` para transliteracion de caracteres - `=~` une regex a cadena - `s///` para sustitucion, `m//` para coincidencia

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →