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

Str*_*ind 4 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;
...
...
Run Code Online (Sandbox Code Playgroud)

Mig*_*Prz 12

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

你可以做什么?

a)require导入(运行时):

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

b)use if(编译时):

use if $^O eq 'MSWin32', "My::WindowsStuff";
Run Code Online (Sandbox Code Playgroud)

  • 今天我了解到[`if`](http://perldoc.perl.org/if.html)也是一个实用主义者. (4认同)