如果脚本在Windows上运行,我如何确保加载模块?

时间:2014-08-05 07:26:29

标签: linux windows perl module perl-module

我有一个需要在Windows和Linux上运行的Perl脚本。问题是我需要use一个仅适用于Windows的Perl模块。

我已尝试过以下内容,但它仍然包含WindowsStuff个软件包。

use strict;
if ($^O eq 'MSWin32' ){
    use My::WindowsStuff;
}
use File::Basename;
use Getopt::Long;
...
...

1 个答案:

答案 0 :(得分:12)

因为use在编译时生效,所以它并不尊重正在编译的代码的普通流控制。 特别是,在有条件的假分支内部使用会阻止它被处理。

你可以做什么?

a)require导入(运行时):

if( $^O eq 'MSWin32' ) {
   require My::WindowsStuff;
   My::WindowsStuff->import if My::WindowsStuff->can("import");
}

b)use if(编译时):

use if $^O eq 'MSWin32', "My::WindowsStuff";