my $PortObj; if ( $^O =~ m/Win32/ ) { require Win32::SerialPort; $PortObj = new Win32::SerialPort ($PortName, $quiet, $lockfile) or die "Can't open $PortName: $!\n"; } else { require Device::SerialPort; $PortObj = new Device::SerialPort ($PortName, $quiet, $lockfile) or die "Can't open $PortName: $!\n"; } # theoretically do same stuff on Win32 or Linux with same method calls