2010-01-07 11 views
27

die aracılığıyla bir özel durum oluşturan bir komut dosyası var. İstisnaları yakaladığımda, ekli konum bilgisi olmaksızın mesaj çıktılamak istiyorum.Konum bilgisi olmadan bir kalıp() mesajını nasıl verebilirim?

Bu komut:

#! /usr/bin/perl -w 

use strict; 

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

çıkışları My error message at d:\src\test.pl line 7.

ben çıkışını almak için sadece tercih ediyorum: My error message

Umarım insanlar bunu yapmak istiyorum neden odaklanmak yok ama Birisi ilgilenirse o zaman:

Orklar, girdi arar ve her bir girdi parçasını bir işleyiciye gönderir, eğer ele geçiremediği bir girdi parçasıyla karşılaşırsa, o zaman atar, böylece tüm istisnalar aynı kod parçasından gelir. Bu nedenle, bu durumda konum çok yararlı değildir.

cevap

43

sizin dizeye \n ekleyin:

die "My error message\n" 

Bu die belgelenmiştir:

LİSTESİ son elemanı yeni bir satır ile değil sona eriyor, geçerli komut hat numarası ve giriş satırı numarası ( varsa) da yazdırılır ve numaralı bir satır verilir.

+1

Teşekkürler. Aradığım şey buydu! – chollida

+4

her gün yeni bir @ SO öğren. – Erik

+3

Vay, bu belirsiz! Teşekkürler – Bizmarck

2

Tüm ek bilgiler için die için perlfunc girdisine bakın. Ve mesajınızı \n ile bitirin.

16

Bunu tartışan Mastering Perl'da "Hata Giderme" hakkında bir bölüm var. Eğer sadece yeni bir satır referans ile de yapabilirsiniz die mesajınızı biten dosyayı ve satır numarasını ortadan kaldırabilir rağmen:

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"; 
    } 

hata mesajlarının sonunda yeni satır gibi değil eğilimindedir, ve ben cenneti olmasına rağmen Kodunuzu gördüm, istisna için ekstra bilgi eklemek istediğim bir durum gibi geliyor, böylece neler olup bittiğini takip edebiliyorum.

Ayrıca, CPAN'daki birçok Özel Durum modülünü kullanmayı düşünebilirsiniz.

+4

Cevabınız için teşekkürler Brian. Bir referansla ölen olmanın farkında değildim. Bunun çok yararlı olduğunu görebiliyorum. – chollida

İlgili konular