2012-04-29 19 views
9

Perl programım USB üzerinden bağlanan bir seri aygıttan veri okuyor. Sözde Perl Senaryomun Manşetler:Yüklenen bir modülün kodundan yayılan Perl uyarıları nasıl bastırılır?

use warnings; 
use strict; 

use Device::SerialPort; 
my $PortObj = tie(*$handle , "Device::SerialPort" , $PortName) or die "Cannot open serial port: $!\n"; 
while (1) { 
    my $readLength = read($handle , my $frameData , $frameLength) 
} 

tüm gayet iyi çalışıyor ve USB cihazı fişten bile ben cihaz dosyası kaybolur ve tekrar belirdiğinde, o durumdan kurtarmak mümkün değilim. Kendi kodumdan kaynaklanan tüm hataları yakalayabilirim, ancak yüklenen modüller (Device :: SerialPort) da uyarıları ortaya çıkarır ve kayıt defterimde görünmelerini istemiyorum.

Ben bu yüzden bu özel uyarılar görmüyorum benim koduna bayrağı çeşit ekleyebilir miyim? Kendi komut dosyamdan gelen uyarılar değil, yalnızca modüllerden/modüllerden gelen uyarıların bastırılmasının benim için önemli.

 
[/dev/ttyUSB1] 0x0020 : 00 00 00 00 00 00 00 00 00 AA 93 82 73 68 5E 58 : ............sh^X 
[/dev/ttyUSB1] 0x0030 : 55 54 52 52 4F 4E 50 51 50 00 00 00 00 00 00 00 : UTRRONPQP....... 
Use of uninitialized value $count_in in addition (+) at /usr/lib/perl5/Device/SerialPort.pm line 2214. 
Use of uninitialized value $string_in in concatenation (.) or string at /usr/lib/perl5/Device/SerialPort.pm line 2232. 
[/dev/ttyUSB1] Restart required! 
[/dev/ttyUSB1] Cannot open serial port: No such file or directory 
[/dev/ttyUSB1] Cannot open serial port: No such file or directory 
[/dev/ttyUSB1] Cannot open serial port: No such file or directory 

[/dev/ttyUSB1] 0x0000 : 41 42 01 40 71 01 1C E4 80 99 80 80 80 80 00 00 : [email protected] 
[/dev/ttyUSB1] 0x0010 : 00 03 00 00 83 00 01 01 00 00 00 00 00 00 00 00 : ................ 

Yani ben kurtulmak istiyorum iki Use of uninitialized value uyarıları hakkında geçerli: Şu an için bu gibi görünüyor. Diğer uyarılar benim günlüğüm.

  • libdevice-SerialPort-perl 1.04-2build1
  • perl v5.12.4
+2

O yazara bu hataları bildirmek için iyi bir fikir olacaktır. – ikegami

+0

Tavsiyelerinizi takip edin. – jippie

cevap

12

denemek ve uyarıları yolunu kesmek olabilir:

$SIG{'__WARN__'} = sub { warn $_[0] unless (caller eq "Device::SerialPort"); }; 
+0

Denenmiş, ancak maalesef bir etkisi yoktur. – jippie

+2

@jippie modülü, özel geçersiz kılar sürece, '$ SIG' {__ __ WARN} (olası değil) ya da kullandıkları, aslında uyarıları (Evet doğru) değilseniz '$ SIG {__ __ WARN}' kesinlikle çalışır. Sadece "if" i düzeltme meselesi olabilir. Yeni başlayanlar için s/Device :: Serial/Device :: SerialPort /. – ikegami

+0

Sıçanlar, evet, 'SerialPort' değil * 'Seri'. Teşekkür ederim ikegami. – kmkaplan

3

içinde modülün bir kopyasını yapılmış benim

$ diff SerialPort.pm /usr/lib/perl5/Device/SerialPort.pm 
2207,2208d2206 
<  unless (defined $count_in) { $count_in = 0; } 
<  unless (defined $string_in) { $string_in = ""; } 
: ev dizini ve iki satır eklendi

Çalışıyor gibi görünüyor. Yazar bilgilendirildi.

İlgili konular