28 de ago. de 2009

El sentido común

Una de mis aficiones consiste en jugar al ajedrez, y hace unos cuantos años, cayó en mis manos un manual titulado "El sentido común en ajedrez", de Emanuel Lasker, probablemente uno de los mejores (quizás el número uno) de entre todos los campones de este deporte. Este libro era sencillo, directo y servía para hacer fácil aquellas cosas que podían parecer complicadas en un principio.

Te preguntarás ¿que tiene que ver esto con Perl? Bueno, la verdad que me apetecía contarlo, porque esta tarde encontré en mi estantería este libro, y me ha hecho recordar lo bien que me lo pasé cuando lo leí, hará unos 20 años (!). E inmediatamente, he recordado un módulo curioso y más que recomendable: common::sense. Por tanto el nexo de unión entre el ajedrez y Perl en este artículo reside precisamente en el uso del menos común de todos los sentidos.

Pero, ¿en qué consiste el sentido común en Perl? Llevamos ya un tiempecito con la versión 5.10 del lenguaje, y muchos no hacemos uso de una serie de características nuevas (no presentes anteriormentem y que por tanto harían que los scripts no funcionasen en plataformas antiguas).

use common::sense;

# Es lo mismo que:
#
# use strict qw(vars subs);
# use feature qw(say state switch);
# no warnings;

como podemos observar, hay un par de curiosidades en el módulo:
  1. no warnings, parece contrario a lo que uno inicialmente puede pensar, pero tiene su lógica. La activación de warnings debería afectar únicamente a aquellas partes del código que el programador tiene bajo su control, no a aquellas pertenecientes a los módulos que está utilizando. Por tanto, si se activa el flag "-w", hay que asegurar que no va a tener implicaciones en nuestro módulo para que no aporte mensajes que no deberían preocupar al programador que lo use.
  2. use feature, para poder emplear las nuevas características de la versión 5.10 (las cuales no están disponibles si no se las activa de esta manera). Son las siguientes:
  • say: es lo mismo que hacer un print añadiendo un "\n" al final de forma implícita.
  • state: viene a ser un equivalente de las variables de tipo static en C o en Java, es decir se crea e inicializa una única vez
  • switch: el tan debatido largamente control de flujo de tipo switch, que tiene eso sí una implementación avanzada, donde podemos incluso utilizar expresiones regulares
Cabe recordar que la versión 5.10 trae unas cuantas cosas más, y si las queremos activar todas, basta con hacer esto:

use feature qw(:5.10);

¿y tú, haces uso del sentido común que te propongo?


1 comentario:

  1. Me ha hecho recordar otro módulo parecido: Modern::Perl

    ResponderEliminar