[英]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.