The following Perl code ..
if ($^O eq \"MSWin32\") {
use Win32;
This code will work in all situations, and also performs the load at compile-time, as other modules you are building might depend on it:
BEGIN {
if ($^O eq "MSWin32")
{
require Module;
Module->import(); # assuming you would not be passing arguments to "use Module"
}
}
This is because use Module (qw(foo bar))
is equivalent to BEGIN { require Module; Module->import( qw(foo bar) ); }
as described in perldoc -f use.
(EDIT, a few years later...)
This is even better though:
use if $^O eq "MSWin32", Module;
Read more about the if
pragma here.
require Module;
But use
also calls import
, require
does not. So, if the module exports to the default namespace, you should also call
import Module qw(stuff_to_import)
;
You can also eval "use Module"
- which works great IF perl can find the proper path at runtime.
In general, use Module
or use Module LIST
are evaluated at compile time no matter where they appear in the code. The runtime equivalent is
require Module;
Module->import(LIST)
As a shortcut for the sequence:
BEGIN {
if ($^O eq "MSWin32")
{
require Win32;
Win32::->import(); # or ...->import( your-args ); if you passed import arguments to use Win32
}
}
you can use the if pragma:
use if $^O eq "MSWin32", "Win32"; # or ..."Win32", your-args;