Ir al contenido principal

Lo nuevo de Perl 5.10. 3: El operador smart match

El operador de coincidencia universal, ~~. El sueño hecho realidad del programador que quiere tener un código corto, limpio, claro.

Para los programadores de Perl, se nos convirtió en costumbre pensar la forma en la cual tenemos que saber cómo comparar dos elementos. Estamos acostumbrados a pensar en las múltiples formas, operadores y posibilidades de comparación entre elementos, comprobación y existencia de elementos dentro unos de otros, valores de retorno de las funciones, existencia de un elemento dentro de un array o hash.

Pero a su vez, esto es un problema para los que empiezan, que se sienten abrumados por la cantidad de operadores y nueva sintaxis que deben aprender.

Ahora no. Casi todas de estas operaciones se pueden realizar con el mismo operador.

Un ejemplo:
     if ( $a ~~ @b ) {

hará lo que sospechamos: devolverá verdadero si el elemento $a está dentro de @b, es decir, que alguno de los elementos de @b es igual a $a. Ya no hay que escribir un bucle para recorrer el array, en busca de ese elemento.

La siguiente tabla es un resumen de las combinaciones posibles:

    $a          $b          Tipo de coincidencia     Código similar
====== ===== ==================== ==============

Codigo[+] Codigo[+] igualdad referencial $a == $b
Cualquiera Código[+] test escalar de sub $b->($a)

Hash Hash claves hash idénticas [sort keys %$a]~~[sort keys %$b]
Hash Array existencia hash slice grep {exists $a->{$_}} @$b
Hash Regex filtrado claves hash grep /$b/, keys %$a
Hash Cualquiera existencia item hash exists $a->{$b}

Array Array arrays son idénticos[*]
Array Regex filtrado array grep /$b/, @$a
Array Número array contiene número grep $_ == $b, @$a
Array Cualquiera array contiene string grep $_ eq $b, @$a

Cualquiera undef indefinido !defined $a
Cualquiera Regex búsqueda del patrón $a =~ /$b/
Código() Código() resultados son iguales $a->() eq $b->()
Cualquiera Código() simple closure truth $b->() # ignoring $a
Número valor[!] igualdad numérica $a == $b
Cualquiera string igualdad de cadena $a eq $b
Cualquiera Número igualdad numérica $a == $b

Cualquiera Cualquiera igualdad de cadena $a eq $b

+ - debe ser una referencia a un código cuyo prototipo (si está presente) no sea ""
(sub con un prototipo "" son tratados en la entrada 'Código()' que está más abajo).
* - es decir, cada elemento coincide con el elemento del mismo índice en el otro
array. Si aparece una referencia circular, volvemos a la igualdad referencial.
! - Cualquier cosa, sea un número real o un string que parezca un número.


Comentarios

Entradas populares de este blog

  Recuperación del Lenovo/Iomega ix2-ng Partimos de un Lenovo/Iomega ix2-ng que después de arrancar se queda con el piloto de alimentación fijado en color rojo. El dispositivo parece que no responde ni da servicio de ninguna clase. El objetivo es instalar una versión de recuperación del firmware que permita recuperar el dispositivo.   Resumen Se van a seguir los pasos indicados en esta página: https://web.archive.org/web/20190427155514/http://iomega.nas-central.org/wiki/Install_firmware_on_a_fresh_disk_(EZ_Media_%26_ix2-ng) más los pasos indicados en esta página: https://www.myhacklog.com/restore-an-iomega-lenovo-storcenter-ix2-ng/   Material necesario un pincho USB de 1 GB mínimo de capacidad, formateado en FAT32(vfat) los siguientes archivos: de la última página indicada, el archivo Restore-an-iomega-lenovo-storcenter-ix2-ng.zip de la página de Lenovo, la última actualización del firmware : http://download.lenovo.com/lenovoemc/eu/en/app/answers/detail/a_id/3117...

Desbloquear Lenovo ix4-300d usando pincho USB

Operaciones básicas con el Lenovo ix4-300d Desbloquear ix4-300d Material necesario: Un pincho USB v2.0 1 GB mínimo de capacidad. descargar en la computadora el archivo con la imagen de arranque por USB ofrecida por Lenovo ( aquí , una copia) descomprimir el archivo rar a un directorio, y copiar todos los archivos al pincho mientras tanto, apagar y desenchufar el aparato desenroscar los dos tiradores traseros y quitar la tapa sacar todos los discos según como indica el manual, IMPORTANTE: recordando la posición que ocupan (de 1 a 4) una vez terminada la copia de los archivos en el pincho, desenchufarlo de la computadora y enchufarlo en el PRIMER conector USB (parte superior) de la parte TRASERA del ix4 pulsar el botón de RESET de la parte trasera y mantenerlo pulsado encender el ix4-300d, manteniendo pulsado el botón de RESET durante 30 segundos hasta que aparezca el mensaje " Booting USB... " esperar unos minutos... si sale la imagen de un pincho al lado de ...

Darse de baja de Vodafone

Sí, amigo, debes admitirlo... todo tiene su fin... incluso hasta la relación de amor y odio con tu compañía telefónica. Pero no es tan fácil como decir un "hasta luego". No, no, y no. Ella se resistirá. Hará la posible, lo imposible, lo legal y... no hará lo ilegal porque no puede, pero sí hará lo más estúpido, kafkiano y burocrático posible, todo lo que esté en su mano, para impedir que te marches... Y una vez que ya estés fuera, se vengará de ti. ¿Por qué? Pues porque eres un mierda, un sinvergüenza, un presunto delincuente, un hijo puta, un cabrón, por dejarla sola. Así que no te extrañe que tenga un comportamiento muy diferente de cuando aquellos gloriosos días te llamaba, a ti, que, por ser su amante preferido, se acordaba, te añoraba, y te decía que tenía una sorpresa para ti... a veces 1000 mensajes cortos... otras veces, tarifas bajas... teléfonos baratos... Nada... mentiras a medias... porque un día descubres el concepto "letra pequeña". Sí, ella me adora, ...