He estado poniendo cosas tontas al final de mis módulos por un tiempo. No hay daño y es un pequeño huevo de Pascua. uny2k útil termina con "Yes, this code is a joke."
Class::Fields está lleno de ellos.
Yendo un paso más allá, a veces, cuando se documenta una función para devolver true
y false
, devolveré algo distinto de 1 para true
. Esto es para castigar a las personas que escriben if foo() == 1
cuando quieren decir if foo()
. Esto fue más o menos en el mismo período que estaba escribiendo use constant TRUE => 1==1; use constant FALSE => !TRUE;
He visto el valor de retorno de un módulo utilizado en el código de producción. No recuerdo exactamente por qué. La lógica del desarrollador fue ... torturada. Creo que fue algo así como no querer tener que escribir solo una línea en lugar de dos. No recuerdo por qué no solo lo exportó.
Este fue el mismo desarrollador que utiliza %_
para pasar argumentos en torno (el símbolo *_
es global través de paquetes) y escribió declaraciones mapa 150 dentro de la línea de declaraciones de mapas.
El peligro de usar el valor de retorno, además de la ofuscación, es que solo funciona una vez.
$ cat Foo.pm
package Foo;
return "Basset hounds got long ears";
$ cat test.plx
#!/usr/bin/perl -w
print require Foo, "\n";
print require Foo, "\n";
$ perl -I. test.plx
Basset hounds got long ears
1
La primera llamada a require
evalúa Foo.pm y devuelve el valor de retorno. La segunda llamada ya está en %INC
y simplemente devuelve verdadero. Y ni siquiera puede estar seguro de que sea lo primero que necesita el código. Puede solucionar esto con do "Foo.pm"
pero ahora está recargando el módulo cada vez con advertencias sobre rutinas redefinidas, problemas de rendimiento y posiblemente la reinicialización de globales. Que no vale la pena.
¿Por qué querrías hacer esto? – innaM
odio escribir lo mismo dos veces. Estoy de acuerdo, tengo un problema de refactorización, he asistido a reuniones ... –
La refabricación es una cosa, el golf es otra. ;) –