in reply to Supressing error messages on serial port open in Linux

The code that produces the unwanted message is in SerialPort.pm:

# get the current attributes $ok = $self->{TERMIOS}->getattr($self->{FD}); unless ( $ok ) { carp "can't getattr: $!"; undef $self; return undef; }

So either comment out the carp ... line, or (if you don't want to mess with the module's source) overwrite the carp routine that has been imported into the Device::SerialPort namespace.  I.e., in your code, before you call the constructor, say

{ no warnings 'redefine'; sub Device::SerialPort::carp { }; # no-op } ... $PortObj = new Device::SerialPort($port, 1) or next;

The latter is somewhat of a dirty hack, because it of course also disables any carp messages that you might actually want to see...

Replies are listed 'Best First'.
Re^2: Supressing error messages on serial port open in Linux
by Corion (Patriarch) on Sep 02, 2011 at 12:57 UTC
    { no warnings 'redefine'; sub Device::SerialPort::carp { }; # no-op }

    Please don't do it that way. Always localize the overwriting of subroutines:

    { no warnings 'redefine'; local *Device::SerialPort::carp = sub { # no-op }; $PortObj = new Device::SerialPort($port, 1) or next; } # carp works again
      Works great! Error messages are goner! Thank you!

      Ooops, now I'm getting this error:

      Name "Device::SerialPort::carp" used only once: possible typo at dial. +pl line 58.
      This is my code:
      eval "use Device::SerialPort; 1" or die $@; my $directory = '/dev'; opendir (DIR, $directory) or die $!; while (my $file = readdir(DIR)) { #print "$file\n"; push (@ports, "$directory/$file") if ($file =~ /ttyS/g); push (@ports, "$directory/$file") if ($file =~ /ttyUSB/g); } closedir(DIR); foreach my $port (@ports){ no warnings 'redefine'; local *Device::SerialPort::carp = sub {}; $PortObj = new Device::SerialPort($port, 1) or next; $PortObj->close; push(@ok_ports, $port); sleep (1); };

        This is a warning, not an error. See diagnostics. You can suppress that warning by disabling the warning:

        no warnings 'once';