Rozważmy następujący scenariusz nonsense jako przykład:Prevent perla od drukowania identyczne komunikaty ostrzegawcze
use strict;
use warnings;
my $uninitialisedValue;
while(<>){
print ${$uninitialisedValue}{$_},"\n";
}
Która jest uruchamiany z linii poleceń:
$ perl warningPrinter.pl < longfile.txt
Niezależnie od tego, co zawiera stdin, stdout będzie być pełen:
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.
...
Pracuję z bardzo długimi plikami, więc odbieram to jako wyjście, gdy tes mój scenariusz jest co najmniej łagodnie irytujący. Proces może zareagować na sygnał zakończenia CTRL-c, a mój terminal jest nagle wypełniony tym samym komunikatem o błędzie.
Czy istnieje sposób na uzyskanie perla, aby wydrukować tylko pierwsze wystąpienie identycznego i powtarzającego się komunikatu ostrzegawczego, lub po prostu spowodować, że komunikaty ostrzegawcze będą śmiertelne w wykonaniu skryptu? Widząc, że nigdy nie napisałem scenariusza, który działa pomimo ostrzeżeń w nich, akceptuję albo. Ale jest to prawdopodobnie wygodniejsze, jeśli uda mi się przekonać perla do drukowania identycznych ostrzeżeń tylko raz.
Spróbuj innego StackOverflow wpis: [Jak mogę dokonać Perl umrze, jeśli generowane jest ostrzeżenie?] [1] [1]: http://stackoverflow.com/questions/3896060/how- can-i-make-perl-die-if-a-warning-is-generowany –
Doskonały. 'użyj ostrzeżeń FATAL => 'all'' działa świetnie dla zabicia procesu po ostrzeżeniu w moim przypadku. – MattLBeck
Nie używaj 'for' podczas czytania pliku, szczególnie gdy plik jest duży, ponieważ pętla for wstępnie ładuje swoją listę do pamięci. Zamiast tego użyj 'while'. Przekierowanie pliku na standardowe wejście jest zbyteczne, wystarczy użyć pliku jako argumentu. W twoim konkretnym problemie ponowne otwarcie pliku STDERR do pliku może być rozwiązaniem. – TLP