use strict
genera un error si utiliza referencias simbólicas (es decir, cadenas para representar nombres de símbolos). Genera un error si usa una variable sin declararla (esto fomenta el uso de variables léxicas 'my
', pero también se cumple si declara correctamente los paquetes globales). También genera un error si deja palabras sin usar en la secuencia de comandos (cadenas sin comillas, esencialmente, según la definición de citas de Perl). Con 'strict
', puede habilitar o deshabilitar cualquiera de las tres categorías de restricciones, y yo lo hago dentro de los bloques delimitados. Es una práctica recomendada habilitar restricciones, aunque en ocasiones el código legítimo requiere que algunas de sus características se deshabiliten localmente. Sin embargo, uno debería pensar detenidamente si esto es realmente necesario y si su solución es ideal. Puede leer sobre las restricciones en el POD de Perl titulado "estricto".
use warnings
genera un mensaje de advertencia basado en muchos criterios, que se describen en el POD 'perllexwarn'. Estas advertencias no tienen nada que ver con las restricciones, sino que buscan los "errores" más comunes que uno probablemente encuentre en su programación. También es una buena práctica usar advertencias al escribir scripts. En algunos casos en los que el mensaje puede ser indeseable, una determinada categoría de advertencia puede desactivarse localmente dentro de un alcance. Información adicional se describe en 'advertencias'.
use diagnostics
hace que las advertencias sean más detalladas, y en un entorno de desarrollo o aprendizaje, especialmente entre los recién llegados, es muy deseable. Los diagnósticos probablemente quedarían fuera de un 'producto final', pero mientras están en desarrollo pueden ser una buena adición a los mensajes claros que normalmente se generan. Puede leer sobre diagnósticos en el "diagnóstico" Perl POD.
No hay ninguna razón para obligarse a usar solo una de las opciones anteriores u otra. En particular, las advertencias de uso y el uso estricto generalmente se deben usar en los programas modernos de Perl.
En todos los casos (excepto los diagnósticos, que solo está utilizando para el desarrollo de todos modos), las restricciones o advertencias individuales pueden estar deshabilitadas léxicamente. Además, sus errores pueden quedar atrapados en eval{ .... }
, con los bloques try/catch de Try::Tiny
, y en algunas otras formas. Si existe una preocupación acerca de un mensaje que ofrezca a un posible atacante más información sobre un script, los mensajes podrían enrutarse a un archivo de registro. Si existe el riesgo de que dicho archivo de registro consuma mucho espacio, existe un problema mayor, y el origen del problema debería resolverse o, en algunos casos, simplemente tener el mensaje deshabilitado.
Los programas de Perl en la actualidad deberían ser altamente estrictos/cumplir con las advertencias como una buena práctica.
Motivo de la votación cercana? –
No voté para cerrar, pero sospecho que es porque las advertencias y estrictas hacen cosas completamente diferentes. No es una pregunta de ambos, usa ambos. –
Gracias por las ediciones. [@starblue: para editar el título y @tchrist para agregar etiquetas adicionales] –