Si consideri il seguente script di sciocchezze come esempio:Prevenire perl di stampare i messaggi di avviso identici
use strict;
use warnings;
my $uninitialisedValue;
while(<>){
print ${$uninitialisedValue}{$_},"\n";
}
cui viene eseguito dalla riga di comando:
$ perl warningPrinter.pl < longfile.txt
Indipendentemente da ciò che STDIN contiene, lo STDOUT sarà essere pieno di:
Use of uninitialized value in print at warningPrinter.pl line 16, <> line 1.
Use of uninitialized value in print at warningPrinter.pl line 16, <> line 2.
Use of uninitialized value in print at warningPrinter.pl line 16, <> line 3.
Use of uninitialized value in print at warningPrinter.pl line 16, <> line 4.
...
Io lavoro con file molto lunghi, quindi ricevere questo come output quando il mio copione è per lo meno lievemente irritante. Il processo può richiedere un po 'di tempo per rispondere a un segnale di terminazione CTRL-c e il mio terminale viene improvvisamente riempito con lo stesso messaggio di errore.
Esiste un modo per far stampare a Perl solo la prima istanza di un messaggio di avviso identico e ricorrente o semplicemente rendere i messaggi di avviso fatali per l'esecuzione dello script? Vedendo come non ho mai prodotto una sceneggiatura che funziona nonostante abbia avvertimenti in loro, accetterei entrambi. Ma probabilmente è più comodo se riesco a far perl stampare avvisi identici una sola volta.
Prova questo altro post StackOverflow: [Come posso fare Perl morire se viene generato un avvertimento?] [1] [1]: http://stackoverflow.com/questions/3896060/how- can-i-make-perl-die-if-a-warning-è generato –
Eccellente. 'use warnings FATAL => 'all'' funziona benissimo per uccidere il processo dopo un avviso nel mio caso. – MattLBeck
Non utilizzare 'for' durante la lettura di un file, specialmente quando il file è grande, perché un ciclo for pre-carica il suo elenco in memoria. Usa 'while' invece. Inoltre, il reindirizzamento di un file su stdin è ridondante, basta usare il file come argomento. Nel tuo problema specifico, riaprire STDERR in un file può essere una soluzione. – TLP