我有一个需要在 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/