← Perl EspañolChapter 03 of 13

Operadores

## Objetivos de Aprendizaje - Dominar los operadores aritmeticos - Comprender los operadores de cadena - Aprender operadores de comparacion - Trabajar con operadores logicos - Comprender operadores bitwise y de archivo ## Operadores Aritmeticos ### Operaciones Basicas ```perl use strict; use warnings; my $a = 10; my $b = 3; print $a + $b; # 13 (suma) print $a - $b; # 7 (resta) print $a * $b; # 30 (multiplicacion) print $a / $b; # 3.333... (division) print $a % $b; # 1 (modulo) print $a ** $b; # 1000 (10^3, exponenciacion) ``` ### Comportamiento de la Division ```perl # La division siempre produce punto flotante print 10 / 3; # 3.33333333333333 # Division entera print int(10 / 3); # 3 (trunca) print POSIX::floor(10 / 3); # 3 (piso) ``` ### Incremento/Decremento ```perl my $x = 5; # Pre-incremento print ++$x; # 6 (incrementa primero, retorna 6) # Post-incremento print $x++; # 6 (retorna 6, luego incrementa) print $x; # 7 my $y = 5; print --$y; # 4 print $y--; # 4 print $y; # 3 ``` ## Operadores de Cadena ### Concatenacion ```perl my $primero = "Hola"; my $ultimo = "Mundo"; my $saludo = $primero . " " . $ultimo; # "Hola Mundo" # Asignacion por concatenacion my $str = "Hola"; $str .= " Mundo"; # "Hola Mundo" ``` ### Repeticion ```perl my $guion = "-" x 40; # 40 guiones my $patron = "AB" x 3; # "ABABAB" # Util para formateo print "+" . ("-" x 10) . "+\n"; # +----------+ ``` ## Operadores de Comparacion ### Comparacion Numerica ```perl my $a = 10; my $b = 20; print $a == $b; # falso (0) print $a != $b; # verdadero (1) print $a < $b; # verdadero (1) print $a > $b; # falso (0) print $a <= $b; # verdadero (1) print $a >= $b; # falso (0) print $a <=> $b; # -1 (nave especial: -1, 0, o 1) ``` ### Comparacion de Cadenas ```perl my $a = "manzana"; my $b = "banana"; print $a eq $b; # falso ("") print $a ne $b; # verdadero ("banana" ne "manzana") print $a lt $b; # verdadero ("manzana" lt "banana") print $a gt $b; # falso print $a le $b; # verdadero print $a ge $b; # falso print $a cmp $b; # -1 (cmp retorna -1, 0, o 1) ``` ### Tabla de Comparacion | Numerico | Cadena | Significado | |----------|--------|-------------| | `==` | `eq` | Igual | | `!=` | `ne` | No igual | | `<` | `lt` | Menor que | | `>` | `gt` | Mayor que | | `<=` | `le` | Menor o igual | | `>=` | `ge` | Mayor o igual | | `<=>` | `cmp` | Nave especial/comparar | ## Operadores Logicos ### Logica Basica ```perl my $verdadero = 1; my $falso = 0; print $verdadero && $falso; # falso (0) - AND print $verdadero || $falso; # verdadero (1) - OR print !$verdadero; # falso (0) - NOT ``` ### Sintaxis Alternativa ```perl print $verdadero and $falso; # && y || tienen mayor precedencia print $verdadero or $falso; # que 'and' y 'or' # Usa parentesis para seguridad print ($verdadero and $falso); ``` ### Evaluacion de Cortocircuito ```perl my $x = 0; # No evaluara la segunda parte si la primera es falsa if ($x != 0 && 10 / $x > 1) { print "Condicion cumplida\n"; } # No llamara a la funcion si la primera es verdadera if (defined $valor || obtener_valor()) { # Usar valor en cache o obtener nuevo } ``` ## Operadores Bitwise ### Operaciones Binarias ```perl my $a = 5; # 0101 en binario my $b = 3; # 0011 en binario print $a & $b; # 1 (0001 - AND) print $a | $b; # 7 (0111 - OR) print $a ^ $b; # 6 (0110 - XOR) print ~$a; # -6 (complemento) print $a << 1; # 10 (0101 << = 1010 - corrimiento izquierdo) print $a >> 1; # 2 (0101 >> = 0010 - corrimiento derecho) ``` ### Manipulacion de Bits ```perl my $banderas = 0b1010; # 10 en decimal # Verificar si un bit esta establecido if ($banderas & 0b1000) { print "Bit 3 esta establecido\n"; } # Establecer un bit $banderas = $banderas | 0b0001; # 1011 # Cambiar un bit $banderas = $banderas ^ 0b0100; # 1111 ``` ## Operadores de Asignacion ### Asignacion Compuesta ```perl my $x = 10; $x += 5; # $x = 15 $x -= 3; # $x = 12 $x *= 2; # $x = 24 $x /= 4; # $x = 6 $x %= 5; # $x = 1 $x **= 2; # $x = 1 $x .= " hola"; # $x = "1 hola" # Especifico para cadenas $x x= 3; # Repetir "1 hola" 3 veces ``` ## Rango y Flip-Flop ### Operador de Rango ```perl # Contexto de arreglo - crea lista my @nums = (1 .. 10); # 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 # Rango de cadenas (secuencias de caracteres) my @letras = ('a' .. 'z'); my @ALPHA = ('A' .. 'Z'); # Contexto escalar - flip-flop if (5 .. 10) { # Verdadero cuando la condicion esta en rango 5-10 print "En rango\n"; } ``` ## Operadores de Prueba de Archivos ### Pruebas de Archivos ```perl use strict; use warnings; use -e File::Spec; # Para multiplataforma my $archivo = "test.txt"; # Pruebas basicas de archivo -e $archivo; # Existe? -r $archivo; # Legible? -w $archivo; # Escribible? -x $archivo; # Ejecutable? -f $archivo; # Archivo regular? -d $archivo; # Directorio? -l $archivo; # Enlace simbolico? -s $archivo; # Tamano en bytes (retorna tamano o falso) # Combinado if (-e $archivo && -w $archivo) { print "El archivo existe y es escribible\n"; } ``` ### Tamano de Archivo ```perl my $tamano = -s $archivo // 0; print "Tamano: $tamano bytes\n"; if (-s $archivo > 1024 * 1024) { print "El archivo es mayor que 1MB\n"; } ``` ## Operador Condicional ### Operador Ternario ```perl my $edad = 25; my $estado = $edad >= 18 ? "adulto" : "menor"; print $estado; # "adulto" # Puede anidarse my $nota = $puntuacion >= 90 ? "A" : $puntuacion >= 80 ? "B" : $puntuacion >= 70 ? "C" : "F"; ``` ## Precedencia de Operadores ### De Mayor a Menor | Prioridad | Operadores | |----------|---------------------------| | 1 | `()` (agrupacion) | | 2 | `++`, `--` (auto incremento) | | 3 | `**` (exponenciacion) | | 4 | `!`, `~`, `+`, `-` (not logico, not bitwise, unario) | | 5 | `=~`, `!~` (binding de patron) | | 6 | `*`, `/`, `%`, `x` | | 7 | `+`, `-`, `.` | | 8 | `<<`, `>>` (corrimiento) | | 9 | `-e`, `-r`, etc. (pruebas de archivo) | | 10 | `<`, `>`, `<=`, `>=` | | 11 | `==`, `!=`, `eq`, `ne`, `<=>`, `cmp` | | 12 | `&` (AND bitwise) | | 13 | `\|`, `^` (OR bitwise, XOR) | | 14 | `&&` | | 15 | `\|\|` | | 16 | `..` (rango) | | 17 | `?:` (ternario) | | 18 | `=`, `+=`, `-=`, etc. | | 19 | `,`, `=>` | | 20 | `and` | | 21 | `or`, `not` | ### Usar Parentisis ```perl # Claro y seguro if (($a + $b) * $c) { } # Lo mismo pero relyendo en precedencia if ($a + $b * $c) { } # $b * $c primero, luego + $a ``` ## Resumen - Aritmeticos: `+`, `-`, `*`, `/`, `%`, `**` - Incremento: `++$x`, `$x++`, `--$x`, `$x--` - Cadena: `.` (concatenacion), `x` (repeticion) - Comparacion numerica: `==`, `!=`, `<`, `>`, `<=`, `>=`, `<=>` - Comparacion de cadenas: `eq`, `ne`, `lt`, `gt`, `le`, `ge`, `cmp` - Logicos: `&&`, `||`, `!`, `and`, `or`, `not` - Bitwise: `&`, `|`, `^`, `~`, `<<`, `>>` - Pruebas de archivos: `-e`, `-r`, `-w`, `-x`, `-f`, `-d`, `-s` - Ternario: `condicion ? verdadero : falso` - Usa parentesis para asegurar la precedencia correcta

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →