2010-01-07 15 views
27

Mam skrypt, który zgłasza wyjątek za pośrednictwem die. Kiedy przechwycę wyjątek, chcę wypisać komunikat bez dołączonej informacji o lokalizacji.Jak mogę wypisać komunikat die() bez informacji o lokalizacji?

Ten skrypt:

#! /usr/bin/perl -w 

use strict; 

eval { 
    die "My error message"; 
}; 
if([email protected]) { 
    print [email protected]; 
} 

wyjścia My error message at d:\src\test.pl line 7.

Wolałbym tylko, aby uzyskać wynik: My error message

Mam nadzieję, że ludzie nie skupiają się na tym, dlaczego chcę to zrobić, ale jeśli ktoś jest zainteresowany, to:

Sposób w jaki mój skrypt orks, wyszukuje dane wejściowe i wywołuje każdy fragment danych wejściowych do programu obsługi, jeśli natrafi na element wejściowy, którego nie może obsłużyć, a następnie rzuca, więc wszystkie wyjątki pochodzą z tego samego fragmentu kodu. W związku z tym lokalizacja nie jest bardzo pomocna w tej sytuacji.

Odpowiedz

43

Dodaj \n do łańcucha:

die "My error message\n" 

Jest to udokumentowane w die:

Jeśli ostatni element LISTY nie koniec w nowej linii, bieżący skrypt numer linii i numer linii wejściowej (jeśli dowolne) ( ) również zostanie wydrukowany, a zostanie dostarczony znak nowej linii .

+1

Dzięki narzędziowy. Tego właśnie szukałem! – chollida

+4

nauczyć się czegoś nowego @ SO codziennie. – Erik

+3

Wow, co jest niejasne! Dzięki – Bizmarck

2

Aby uzyskać dodatkowe informacje, patrz wpis perlfunc dla die. Zakończ wiadomość z numerem \n.

16

Mam rozdział na temat "Obsługa błędów" w Mastering Perl, który omawia to. Chociaż można wyeliminować pliku i numer linii jedynie przez kończące wiadomość z nowej linii, można również die z odniesieniem:

eval { 
    time % 2 ? 
     die { 
      message => q(I died!), 
      level => 'really really serious', 
      } 
     : 
     die "I died as a string!\n"; 
    }; 

if(ref [email protected]) { 
    print "Reference message was [email protected]>{message}\n"; 
    } 
else { 
    print "[email protected]\n"; 
    } 

ja raczej nie lubią nowego wiersza na końcu komunikatów o błędach, i chociaż Haven Nie widziałem twojego kodu, to brzmi jak sytuacja, w której chciałbym dodać dodatkowe informacje do wyjątku, abym mógł wyśledzić, co się dzieje.

Możesz również rozważyć użycie jednego z wielu modułów wyjątków na CPAN.

+4

Dzięki za odpowiedź Brian. Nie wiedziałem, że mogę umrzeć z referencją. Widzę, że to bardzo przydatne. – chollida

Powiązane problemy