2012-04-29 10 views
9

मेरा पर्ल प्रोग्राम यूएसबी के माध्यम से जुड़े एक सीरियल डिवाइस से डेटा पढ़ रहा है। छद्म पर्ल में मेरी स्क्रिप्ट के मुख्य समाचार:लोड लोड मॉड्यूल के कोड से निकलने वाली पर्ल चेतावनियों को दबाने के लिए कैसे?

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) 
} 

सभी ठीक काम करता है और यहां तक ​​कि जब मैं USB से उपकरण को अनप्लग मैं, उस स्थिति से उबरने के लिए जब डिवाइस फ़ाइल गायब हो जाता है और पुन: दिखाई देता सक्षम हूं। मैं अपनी खुद की लिपि से उत्पन्न सभी त्रुटियों को पकड़ सकता हूं, लेकिन लोड मॉड्यूल (डिवाइस :: सीरियलपोर्ट) भी चेतावनियां पैदा करता है और मैं नहीं चाहता कि वे मेरे लॉगिंग में शामिल हों।

क्या मैं अपने कोड में कुछ प्रकार का झंडा जोड़ सकता हूं इसलिए मुझे ये विशिष्ट चेतावनियां नहीं दिखाई दे रही हैं? मेरे लिए यह महत्वपूर्ण है कि मॉड्यूल से केवल चेतावनियां दबा दी जाए, न कि मेरी अपनी लिपि से चेतावनियां। वर्तमान में यह इस तरह दिखता है:

 
[/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 : ................ 

तो यह दो Use of uninitialized value चेतावनी है कि मैं से छुटकारा पाने के लिए चाहते हैं के बारे में है। अन्य चेतावनियां मेरी खुद की लॉगिंग हैं।

  • libdevice-serialport-पर्ल 1.04-2build1
  • पर्ल v5.12.4
+2

लेखक को उन त्रुटियों की रिपोर्ट करना एक अच्छा विचार होगा। – ikegami

+0

आपकी सलाह का पालन किया। – jippie

उत्तर

12

आप कोशिश करते हैं और चेतावनी अवरोधन सकता है:

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

कोशिश की, लेकिन दुर्भाग्य से कोई प्रभाव नहीं पड़ा है। – jippie

+2

@jippie, जब तक मॉड्यूल विशेष रूप से '$ SIG {__ WARN __}' का उपयोग करके '$ SIG {__ WARN __}' (संभवतः नहीं) को ओवरराइड करता है या यदि वे वास्तव में चेतावनी नहीं देते हैं (हाँ सही), तो निश्चित रूप से काम करता है। यह सिर्फ "अगर" को ठीक करने का सवाल हो सकता है। एस/डिवाइस :: सीरियल/डिवाइस :: सीरियलपोर्ट/स्टार्टर्स के लिए। – ikegami

+0

चूहों, हाँ यह 'सीरियलपोर्ट '* नहीं *' सीरियल' है। धन्यवाद Iikegami। – kmkaplan

3

में मॉड्यूल की एक प्रतिलिपि बना मेरी घर निर्देशिका और दो पंक्तियों को जोड़ा गया:

$ diff SerialPort.pm /usr/lib/perl5/Device/SerialPort.pm 
2207,2208d2206 
<  unless (defined $count_in) { $count_in = 0; } 
<  unless (defined $string_in) { $string_in = ""; } 

जो काम करता है लगता है। लेखक को अधिसूचित

संबंधित मुद्दे

 संबंधित मुद्दे