2009-03-25 11 views
5

Bu, "How can I get around a ‘die’ call in a Perl library I can’t modify?" numaralı izindir.Perl alt yordamında hem yakalanan hem de yakalanmamış hataları nasıl ele alırım?

Bir Kütüphane-Hangi-Çöküyor-Bazen birçok kez çağırır bir alt yordamı var. Aksine kanepenin daha bir eval {} ile bu alt yordam içinde her çağrı, ben sadece ölmesine izin ve benim altyordamını çağıran düzeyde, bir değerlendirme {} kullanın: hata koşulları vardır, ancak

my $status=eval{function($param);}; 
unless($status){print [email protected]; next;}; # print error and go to 
            # next file if function() fails 

ben işlev yapabilir(). Hem yakalanan hem de yakalanmayan hatalar için doğru davranışı elde edebilmem için alt rutinde hata yakalama ve çağrı rutinini tasarlamanın en uygun/zarif yolu nedir? Ne yapmak istediğinizi tam olarak emin değilim

sub function { 
    eval { 
     die "error that can be handled\n"; 
     1; 
    } or do { 
     #propagate the error if it isn't the one we expect 
     die [email protected] unless [email protected] eq "error that can be handled\n"; 
     #handle the error 
    }; 
    die "uncaught error"; 
} 

eval { function(); 1 } or do { 
    warn "caught error [email protected]"; 
}; 

cevap

8

Blok eval iç içe olabilir.

$SIG{__DIE__} = sub { print [email protected] } ; 

eval{ function($param); 1 } or next; 
+0

Köşeli parantezleriniz sert görünüyor! +1 – Axeman

+0

Bu sabah cila yaptım. –

0

, ama bir işleyicisi ile bunu yapabilir düşünüyorum:

İlgili konular