Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

use modules OS dependent

18 views
Skip to first unread message

sl...@dresearch.de

unread,
Apr 14, 2008, 8:42:57 AM4/14/08
to
I'm writing an perl script which should communicate over a serial
port. The script should be able to run in Linux and Win32
environments. In both environments exist modules to access the serial
port:

Win32::SerialPort (under Windows)
Device::SerialPort (else)

I know it is possible to detect the OS using Config::Config. But it
seems not possible to use different modules depending on this
information like this:

if ( $OS eq 'WINDOWS' ) {
use Win32::SerialPort qw( :PARAM :STAT );
} else {
use Device::SerialPort qw( :PARAM :STAT );
}

What's the right way to write such an OS dependent application?

Steffen

Gunnar Hjalmarsson

unread,
Apr 14, 2008, 9:22:13 AM4/14/08
to

I don't know about "right", but this is one way:

BEGIN {
if ( $^O eq 'MSWin32' ) {
require Win32::SerialPort;
import Win32::SerialPort qw( :PARAM :STAT );
} else {
require Device::SerialPort;
import Device::SerialPort qw( :PARAM :STAT );
}
}

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl

sl...@dresearch.de

unread,
Apr 14, 2008, 9:40:24 AM4/14/08
to
On 14 Apr., 15:22, Gunnar Hjalmarsson <nore...@gunnar.cc> wrote:
> I don't know about "right", but this is one way:
> ...

Thanx Gunnar. That was the solution. And sorry for my impatience. ;-)

Jürgen Exner

unread,
Apr 14, 2008, 9:59:09 AM4/14/08
to
sl...@dresearch.de wrote:
>I'm writing an perl script which should communicate over a serial
>port. The script should be able to run in Linux and Win32
>environments. In both environments exist modules to access the serial
>port:
>
> Win32::SerialPort (under Windows)
> Device::SerialPort (else)
>
>I know it is possible to detect the OS using Config::Config. But it
>seems not possible to use different modules depending on this
>information like this:
>
> if ( $OS eq 'WINDOWS' ) {
> use Win32::SerialPort qw( :PARAM :STAT );

This is explained about halfway down in the documentation for "use".

The "BEGIN" forces the "require" and "import" to happen at
compile time.

>What's the right way to write such an OS dependent application?

Don't use use() but an explicit require() and import() without the
enclosing BEGIN.

jue

Gunnar Hjalmarsson

unread,
Apr 14, 2008, 10:13:10 AM4/14/08
to
Jürgen Exner wrote:

> sl...@dresearch.de wrote:
>> What's the right way to write such an OS dependent application?
>
> Don't use use() but an explicit require() and import() without the
> enclosing BEGIN.

s/without/with/

Petr Vileta

unread,
Apr 15, 2008, 6:35:23 PM4/15/08
to
Gunnar Hjalmarsson wrote:
> sl...@dresearch.de wrote:
>> I'm writing an perl script which should communicate over a serial
>> port. The script should be able to run in Linux and Win32
>> environments. In both environments exist modules to access the serial
>> port:
>>
>> Win32::SerialPort (under Windows)
>> Device::SerialPort (else)
>>
>> I know it is possible to detect the OS using Config::Config. But it
>> seems not possible to use different modules depending on this
>> information like this:
>>

<snip>

> if ( $^O eq 'MSWin32' ) {

I prefer
if ( $^O =~ /Win32/i ) {

--
Petr Vileta, Czech republic
(My server rejects all messages from Yahoo and Hotmail. Send me your
mail from another non-spammer site please.)

Please reply to <petr AT practisoft DOT cz>

0 new messages