[英]How do I conditionally use a Perl module only if I'm on Windows?
以下Perl代码..
if ($^O eq "MSWin32") {
use Win32;
.. do windows specific stuff ..
}
..在Windows下运行,但无法在所有其他平台下运行(“无法在@INC中找到Win32.pm”)。 如何在Windows下运行时指示Perl尝试导入Win32,并忽略所有其他平台下的import语句?
此代码适用于所有情况,并且还在编译时执行加载,因为您构建的其他模块可能依赖于它:
BEGIN {
if ($^O eq "MSWin32")
{
require Module;
Module->import(); # assuming you would not be passing arguments to "use Module"
}
}
这是因为use Module (qw(foo bar))
相当于BEGIN { require Module; Module->import( qw(foo bar) ); }
BEGIN { require Module; Module->import( qw(foo bar) ); }
BEGIN { require Module; Module->import( qw(foo bar) ); }
如perldoc -f中所述。
(编辑,几年后......)
这甚至更好:
use if $^O eq "MSWin32", Module;
作为序列的快捷方式:
BEGIN {
if ($^O eq "MSWin32")
{
require Win32;
Win32::->import(); # or ...->import( your-args ); if you passed import arguments to use Win32
}
}
你可以使用if pragma:
use if $^O eq "MSWin32", "Win32"; # or ..."Win32", your-args;
通常, use Module
或use Module LIST
在编译时进行评估,无论它们出现在代码中的哪个位置。 运行时等价物是
require Module;
Module->import(LIST)
require Module;
但是use
也调用import
, require
则没有。 因此,如果模块导出到默认命名空间,您也应该调用
import Module qw(stuff_to_import)
;
您还可以eval "use Module"
- 这非常eval "use Module"
,因为perl可以在运行时找到正确的路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.