Domanda

C'è una differenza tra i due esempi seguenti per iniziare uno script Perl? In tal caso, quando dovrei usarne uno rispetto all'altro?

esempio 1:

#!/usr/bin/perl

use warnings;

esempio 2:

#!/usr/bin/perl -w
È stato utile?

Soluzione

L'uso dello switch abiliterà tutti gli avvisi nei tutti moduli utilizzati dal tuo programma. Usando il pragma lo abiliti solo in quel modulo specifico (o script). Idealmente, usi gli avvisi in tutti i tuoi moduli, ma spesso non è così. L'uso dello switch può ricevere molti avvisi quando si utilizza un modulo di terze parti che non è sicuro per gli avvisi.

Quindi, idealmente, non importa, ma pragmaticamente è spesso preferibile per gli utenti finali non usare lo switch ma il pragma.

Altri suggerimenti

L'opzione della riga di comando -w attiva gli avvisi a livello globale per l'intero interprete. D'altra parte, usa avvertimenti è un "pragma lessicale" e si applica solo nell'ambito lessicale in cui viene utilizzato. Di solito, lo metti nella parte superiore di un file in modo che si applichi all'intero file, ma puoi anche inserirlo in determinati blocchi. Inoltre, puoi utilizzare nessun avviso per disattivarli temporaneamente all'interno di un blocco, nei casi in cui è necessario eseguire un comportamento che genera avvisi in caso contrario. Non puoi farlo se hai -w attivato.

Per informazioni dettagliate sul funzionamento degli avvisi lessicali, incluso come attivare e disattivare vari sottoinsiemi di essi, consultare perllexwarn documento.

" -w " è più vecchio e usato per essere l'unico modo per attivare gli avvisi (in realtà " -w " abilita solo la variabile globale $ ^ W). " usa avvertenze; ??" è ora preferibile (a partire dalla versione 5.6.0 e successive) perché (come già accennato) ha un ambito lessicale anziché globale e puoi attivare / disattivare avvisi specifici. E non dimenticare di iniziare anche con " usa rigoroso; " : -)

Un'altra distinzione degna di nota è che "usa avvertenze" pragma ti consente anche di selezionare avvisi specifici da abilitare (e allo stesso modo, "nessun avviso" ti consente di selezionare gli avvisi da disabilitare).

Oltre ad abilitare / disabilitare affermazioni specifiche utilizzando il pragma, puoi anche promuovere alcuni o tutti gli avvisi di errori:

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

Fai entrambe le cose! Sempre!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top