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
Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top