¿Debo activar las advertencias de Perl con el interruptor de línea de comandos o pragma?

StackOverflow https://stackoverflow.com/questions/221919

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Hay alguna diferencia entre los dos ejemplos a continuación para comenzar un script Perl? Si es así, ¿cuándo usaría uno sobre el otro?

ejemplo 1:

#!/usr/bin/perl

use warnings;

ejemplo 2:

#!/usr/bin/perl -w
¿Fue útil?

Solución

El uso del interruptor habilitará todas las advertencias en todos módulos utilizados por su programa. Usando el pragma, lo habilita solo en ese módulo específico (o script). Idealmente, utiliza advertencias en todos sus módulos, pero a menudo ese no es el caso. El uso del interruptor puede obtener muchas advertencias cuando utiliza un módulo de terceros que no es seguro.

Lo ideal es que no importa, pero pragmáticamente, a menudo es preferible que los usuarios finales no utilicen el interruptor sino el pragma.

Otros consejos

El conmutador de línea de comandos -w activa las advertencias globalmente para todo el intérprete. Por otro lado, use warnings es un " pragma léxico " y solo se aplica en el ámbito léxico en el que se utiliza. Por lo general, lo coloca en la parte superior de un archivo para que se aplique a todo el archivo, pero también puede abarcarlo a bloques particulares. Además, puede usar sin advertencias para desactivarlas temporalmente dentro de un bloque, en los casos en los que deba realizar un comportamiento que genere advertencias. No puede hacer eso si tiene activado -w .

Para obtener detalles sobre cómo funcionan las advertencias léxicas, incluido cómo activar y desactivar varios subconjuntos de ellas, consulte documento perllexwarn .

& w; -w " es más antiguo y solía ser la única forma de activar las advertencias (en realidad, " -w " simplemente habilita la variable global $ ^ W). " advertencias de uso; " ahora es preferible (a partir de la versión 5.6.0 y posterior) porque (como ya se mencionó) tiene un alcance léxico en lugar de global, y puede activar / desactivar advertencias específicas. Y no olvide comenzar también con "use estricto;" :-)

Otra distinción que vale la pena señalar, es que las advertencias de "uso" pragma también le permite seleccionar advertencias específicas para habilitar (y del mismo modo, "sin advertencias" le permite seleccionar advertencias para deshabilitar).

Además de habilitar / deshabilitar aserciones específicas usando el pragma, también puede promover algunas o todas las advertencias a errores:

use strict;
use warnings FATAL => 'all', NONFATAL => 'exec';

Haz ambas cosas! ¡Siempre!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top