如何确保只有在脚本运行在Windows上时才加载模块?

4

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

我已经尝试过以下方法,但它仍然包含WindowsStuff软件包。

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

12

由于use在编译时生效,因此它不会遵循正在编译的代码的普通流控制。特别是,在条件语句的false分支内放置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";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接