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

我已经尝试了下面的方法,但它仍然包含 WindowsStuff 包。

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

最佳答案

因为 use 在编译时生效,它不尊重正在编译的代码的普通流控制。
特别是,将 use 放在条件的 false 分支中并不会阻止它被处理。

你可以做什么?

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";

关于linux - 如何确保仅当脚本在 Windows 上运行时才加载模块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25133304/

10-16 11:36