Devo ligar avisos Perl com a opção de linha de comando ou pragma?
Pergunta
Existe uma diferença entre os dois exemplos a seguir para iniciar um script Perl? Se assim for, quando devo usar um sobre o outro?
Exemplo 1:
#!/usr/bin/perl
use warnings;
Exemplo 2:
#!/usr/bin/perl -w
Solução
Usando a opção permitirá que todos os avisos em todas módulos usados ??pelo seu programa. Usando o pragma de ativá-lo apenas nesse módulo específico (ou script). Idealmente, você usa avisos em todos os seus módulos, mas muitas vezes isso não é o caso. Usando a chave que você pode obter um monte de avisos quando você usa um terceiro módulo partido que não é avisos de segurança.
Assim, o ideal é não importa, mas pragmaticamente muitas vezes é preferível para seus usuários finais para não usar o interruptor, mas o pragma.
Outras dicas
O interruptor -w
de linha de comando acende avisos globalmente para todo o intérprete. Por outro lado, use warnings
é um "pragma lexical" e apenas se aplica no âmbito lexical em que ele é usado. Normalmente, você colocar isso no topo de um arquivo para que ele se aplica a todo o arquivo, mas você também pode alcance para blocos particulares. Além disso, você pode usar no warnings
temporariamente desligá-los dentro de um bloco, nos casos em que você precisa para fazer o contrário comportamento aviso geradoras. Você não pode fazer isso se você tem -w
diante.
Para obter detalhes sobre como lexical avisos trabalho, incluindo como transformar vários subconjuntos deles ligado e desligado, consulte a documento perllexwarn .
"- w" é mais velho e costumava ser a única maneira de transformar avisos sobre (na verdade, "w" apenas permite a $ ^ variável W global). "utilização Advertências"; agora é preferível (a partir da versão 5.6.0 e posterior), porque (como já mencionado) tem um léxico em vez de alcance global, e você pode ativar / desativar avisos específicos. E não se esqueça de também começar com "use strict;" : -)
Outra pena distinção notar, é que a "utilização Advertências" pragma também permite selecionar advertências específicas para permitir (e da mesma forma, "nenhum aviso" permite que você selecione os avisos para desativar).
Além de ativar / desativar afirmações específicas usando o pragma, você também pode promover alguns ou todos os avisos de erros:
use strict;
use warnings FATAL => 'all', NONFATAL => 'exec';
Fazer as duas coisas! Sempre!