Devrais-je activer les avertissements Perl avec le commutateur de ligne de commande ou pragma?

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

  •  03-07-2019
  •  | 
  •  

Question

Existe-t-il une différence entre les deux exemples ci-dessous pour commencer un script Perl? Si oui, quand utiliserais-je l’un sur l’autre?

exemple 1:

#!/usr/bin/perl

use warnings;

exemple 2:

#!/usr/bin/perl -w
Était-ce utile?

La solution

L'utilisation du commutateur activera tous les avertissements de tous les modules utilisés par votre programme. En utilisant le pragma, vous ne l'activez que dans ce module (ou script) spécifique. Idéalement, vous utilisez des avertissements dans tous vos modules, mais ce n'est souvent pas le cas. L’utilisation du commutateur peut vous donner de nombreux avertissements lorsque vous utilisez un module tiers qui n’est pas sécurisé par les avertissements.

Donc, idéalement, cela n'a pas d'importance, mais de manière pragmatique, il est souvent préférable que vos utilisateurs finaux n'utilisent pas le commutateur, mais le pragma.

Autres conseils

Le commutateur de ligne de commande -w active globalement les avertissements pour l'ensemble de l'interpréteur. D’autre part, use warnings est un "pragma lexical". et ne s'applique que dans la portée lexicale dans laquelle il est utilisé. Habituellement, vous placez cela en haut du fichier pour qu'il s'applique à l'ensemble du fichier, mais vous pouvez également l'étendre à des blocs particuliers. En outre, vous pouvez utiliser no warnings pour les désactiver temporairement dans un bloc, dans les cas où vous devez utiliser un comportement générateur d'avertissement. Vous ne pouvez pas faire cela si vous avez -w activé.

Pour plus d'informations sur le fonctionnement des avertissements lexicaux, y compris sur la procédure d'activation et de désactivation de différents sous-ensembles, reportez-vous à la perllexwarn document.

" -w " est plus ancien et était auparavant le seul moyen d'activer les avertissements (en réalité, "-w" active uniquement la variable globale $ ^ W). " utiliser les avertissements; " est maintenant préférable (à partir de la version 5.6.0) car (comme déjà mentionné), il a une portée lexicale plutôt que globale et vous pouvez activer / désactiver des avertissements spécifiques. Et n'oubliez pas de commencer également par "use strict". : -)

Une autre distinction à noter est que "utiliser des avertissements". pragma vous permet également de sélectionner des avertissements spécifiques à activer (de même que "Aucun avertissement" vous permet de sélectionner des avertissements à désactiver).

Outre l'activation / désactivation d'assertions spécifiques à l'aide du pragma, vous pouvez également promouvoir tout ou partie des avertissements en erreurs:

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

Faites les deux! Toujours!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top