
perlstyle - Guía de estilo de Perl

Cada programador tendrá, naturalmente, sus propias preferencias con respecto al estilo, pero hay algunas directrices que harán que sus programas resulten más fáciles de leer, entender y mantener.
Lo más importante es ejecutar siempre los programas con la opción -w.
Puede desactivarla explícitamente en partes del código con el pragma no warnings o con la variable $^W,
si así lo desea.
También debe ejecutar siempre los programas con use strict; si no lo hace,
debe saber por qué no necesita hacerlo.
El pragma use sigtrap y use diagnostics pueden ser también muy útiles.
Con respecto a la estética del código, lo único que le importa a Larry es que la llave de cierre de un BLOQUE multilínea esté alineada con la palabra reservada con la que se inició esa estructura. Aparte de eso, Larry tiene otras preferencias menos estrictas:
else en nueva línea.and y or),
las líneas largas deben dividirse.Larry tiene sus razones para cada una de estas preferencias, pero no aspira a que la mente de los demás funcione igual que la suya.
A continuación se muestran otras cuestiones de estilo más importantes que conviene tener en mente:
open(FOO,$foo) || die "No se puede abrir $foo: $!";
es preferible a
die "No se puede abrir $foo: $!" unless open(FOO,$foo);
porque la segunda forma esconde el objetivo principal de la instrucción dentro de un modificador. Por otra parte,
print "Iniciando análisis\n" if $verbose;
es preferible a
$verbose && print "Iniciando análisis\n";
porque el objetivo principal no es saber si el usuario ejecutó el programa con el modificador -v (de verbose, que se podría traducir como "locuaz" y en este contexto quiere decir "detallado").
Que un operador permita asumir argumentos predeterminados no significa que haya que hacer uso de esos valores predeterminados. Los valores predeterminados son para los programadores de sistemas perezosos que escriben programas pequeños. Si desea que su programa sea legible, debería proporcionar explícitamente los argumentos.
Que sea posible omitir los paréntesis en muchos lugares no significa que deba hacerlo:
return print reverse sort num values %array;
return print(reverse(sort num (values(%array))));
En caso de duda, coloque paréntesis. Por lo menos así los tontos podrán usar la tecla % en vi.
Aunque usted no tenga dudas, piense en el bienestar mental de la persona que tendrá que mantener el código en el futuro; es probable que ponga los paréntesis en el lugar equivocado.
last, con el que puede salir desde cualquier punto. Solo tiene que reducir un poco la sangría para sea más visible:
LINEA:
for (;;) {
instrucciones;
last LINEA if $foo;
next LINEA if /^#/;
instrucciones;
}
grep() (o map()) o `acentos graves` en un contexto nulo (es decir, desechando los valores de retorno). Estas funciones devuelven valores, por lo que debe usarlos. Como alternativa, use un bucle foreach() o la función system().eval para comprobar si el código genera algún error. Si sabe en qué versión o nivel de revisión se implementó determinada característica, puede comprobar $] ($PERL_VERSION en English) para ver si está incluida. El módulo Config también permite consultar valores que el programa Configure determinó durante la instalación de Perl.$sinargs ("sin argumentos"), en los identificadores más largos debe usar guiones bajos para separar palabras. Generalmente resulta más fácil leer $nombres_de_variable_como_este que $NombresDeVariableComoEste (especialmente para los no castellanohablantes). Es una regla sencilla que también se aplica NOMBRES_DE_VARIABLE_COMO_ESTE.
A veces los nombres de los módulos son una excepción a esta regla. De manera informal, Perl reserva los nombres de módulo en minúsculas para los módulos de tipo "pragma", como integer y strict. Los nombres de los demás módulos deben empezar por una letra mayúscula y usar luego una mezcla de mayúsculas y minúsculas, pero preferiblemente sin guiones bajos (por limitaciones en sistemas de archivos primitivos para la representación de nombres de módulos como archivos que deben ajustarse a unos pocos bytes dispersos).
$TODO_MAYUSCULAS Solo constantes (procure evitar conflictos con variables perl)
$Algunas_Mayusculas Ámbito global/estático de paquete
$sin_mayusculas Variables definidas con my() o local() en un ámbito de función
Para los nombres de funciones y métodos es mejor usar minúsculas. P. ej., $obj->como_cadena().
Puede agregar un guión bajo inicial al principio del nombre de una variable o función para indicar no se debe usar fuera del paquete en el que se definió.
/x y poner algunos espacios en blanco para evitar que parezca un galimatías. Si una expresión regular contiene barras diagonales o barras diagonales inversas, no use barras diagonales como delimitadores.and y or para evitar poner demasiados paréntesis en listas de operadores, y para reducir la incidencia de operadores puntuación como && y ||. Llame a las subrutinas como si fueran funciones u operadores de lista para evitar un número excesivo de signos & y paréntesis.print(). $IDX = $ST_MTIME;
$IDX = $ST_ATIME if $opt_u;
$IDX = $ST_CTIME if $opt_c;
$IDX = $ST_SIZE if $opt_s;
mkdir $tmpdir, 0700 or die "No se puede ejecutar mkdir $tmpdir: $!";
chdir($tmpdir) or die "no se puede ejecutar chdir $tmpdir: $!";
mkdir 'tmp', 0777 or die "No se puede ejecutar mkdir $tmpdir/tmp: $!";
STDERR, especificar el programa que causó el problema y la función del sistema (y sus argumentos) que provocó el error, y (MUY IMPORTANTE) contener el mensaje de error estándar del sistema que indique qué salió mal. Un ejemplo sencillo pero suficiente sería:
opendir(D, $dir) or die "No se puede ejecutar opendir $dir: $!";
tr [abc]
[xyz];
use strict y use warnings (o -w). Debería compartir el código. Debería incluso cambiar su visión del mundo. Debería... bueno, ya me callo.C<> para nombres de funciones, variables y módulos (y, de manera más general, cualquier cosa que se pueda considerar que forma parte del código, como identificadores de archivos o valores específicos). Tenga en cuenta que los nombres de función se consideran más legibles con los paréntesis a continuación: funcion().B<> para nombres de comandos, como cat o grep.F<> o C<> para nombres de archivos. F<> debería ser el único código Pod usado para nombres de archivo, pero como la mayoría de los formateadores de Pod lo muestran en cursiva, las rutas de acceso de Unix y Windows, con sus barras diagonales y barras diagonales inversas, podrían resultar menos legibles, por lo que es mejor usar C<>.
explorer + POD2ES at joaquinferrero.com blas.gordon + POD2ES at gmail.com