Diez prácticas fundamentales ...
... durante el desarrollo
Diseñar lo primero el interfaz del módulo.
Escribir test para probar el código antes de empezar éste.
Construir plantillas estándar en formato POD para módulos y aplicaciones.
Utilizar un sistema de control de versiones.
Crear interfaces de órdenes y archivos configuración consistentes.
Acordar un estilo coherente para codificar y automatizarlo con perltidy.
Incluír código en párrafos comentados
Generar excepciones en lugar de retornar valores especiales ó señalizar indicadores en caso de error.
Añadir nuevos test antes de comenzar la depuración.
No intentar optimizar el código sin haber medido antes su tiempo de ejecución (benchmark).
... mientras escribimos código
Al crear identificadores usar [[plantillas gramaticales|perl/pbp/essential/grammatical_templates]] para dotar de coherencia a las variables, clases, funciones y métodos.
Utilizar variables de ámbito léxico y no variables de paquete ó clase.
Etiquetar todos los bucles en los que exista una salida explícita, así como en los operadores next, last y redo.
Don't use bareword filehandles; use indirect filehandles.
En una subrutina extraer lo primero de todo los parámetros de
@_
, usar un hash de parámetros si éstos son más de tres y comprobar siempre si faltan parámetros.Siempre salir de una función ó un método con una instrucción return explícita.
En las expresiones regulares utilizar siempre los indicadores
/x
,/m
y/s
, así como los delimitadores `\A' y '\Z'.En las expresiones regulares utilizar paréntesis para captura de datos sólo cuando realmente se vaya a extraer información. En este caso, además, es conveniente darle nombres a cada token recuperado, en lugar de usar las variables
$1
,$2
, ...Nunca hacer que una variable sea parte del interfaz de un módulo. Utilizar un método de clase ú objeto, ó una función.
... cuando construímos módulos y librerías
Escribir los programas de testeo usando los módulos Test::Simple ó Test::More.
Utilizar el módulo English para aquellas variables cuyo nombre es un signo de puntuación, ya que nos son menos familiares.
Crear constantes con nombre con el módulo Readonly. No estoy demasiado de acuerdo con esto dada la no disponibilidad del módulo en el paquete perl-modules, pero entiendo las razones que da para recomendarlo.
Usar las funciones que proporcionan los módulos Scalar::Util, List::Util y List::MoreUtils, dado que son prácticamente funciones integradas (builtins).
Utilizar el módulo IO::Prompt cuando se necesiten entradas de datos interactivas.
Utilizar los módulos Carp y Exception::Class para gestionar errores mediante excepciones orientadas a objeto, de manera que se informe de dónde se produce el error y no donde se detecta.
Usar el módulo Fatal para que las funciones integradas lancen excepciones al encontrarse errores.
Crear alias mediante los módulos Data::Alias ó Lexical::Alias.
Utilizar el módulo Regexp::Common en lugar de escribir expresiones regulares desde cero.
Utilizar el módulo Class::Std para construir clases adecuadamente encapsuladas.