2011-03-10 58 views

回答

2

在Windows上的ActivePerl總是(或者至少是因爲Perl 5.005)定義了Win32::BuildNumber()功能,這樣你就可以在運行時檢查它:

if (defined &Win32::BuildNumber) { 
    say "This is ActivePerl"; 
} 
else { 
    say "This is NOT ActivePerl"; 
} 

如果你想檢查對於其他平臺上的ActivePerl,則應該使用ActivePerl::BUILD()函數。它只在ActivePerl 5.8.7 build 814中引入,所以它不適用於真正的舊版本。

+0

哈克,但它的工作原理和似乎沒有非hacky解決方案( - : – hippietrail 2011-04-27 15:45:26

7

可以研究如何既皮爾斯已經編譯

perl -V 

一旦你發現了什麼差異造成您的問題,您可以使用Config包檢測特定的功能。要列出所有設置:

perl -MConfig -MData::Dump -e "dd \%Config" 
+0

我能看到的唯一有用的區別是Strawberry Perl將自己的名字放在'uname'中,但ActivePerl只有一個空白的'uname'。這使得一些其他Windows Perl可能與ActivePerl混淆。不是一個完美的情況,但也許我們所有的... – hippietrail 2011-03-10 16:15:23

+0

也'數據:: Dump'似乎並沒有提供默認草莓Perl的。 – hippietrail 2011-03-11 01:56:19

1

自版本813.1起,ActiveState Perl默認提供了ActivePerl包(無需加載任何模塊),而其他版本的Perl可能不會。至少草莓Perl 5.20.1不會。您可以使用相似的代碼下面找出是否你的腳本通過的ActiveState Perl的正運行:

if (exists $::{'ActivePerl::'}) { 
    # getting called through ActiveState Perl 
} else { 
    # not getting called through ActiveState Perl 
} 

有關的activeperl模塊的詳細信息,請參閱http://docs.activestate.com/activeperl/5.8/lib/ActivePerl.html

相關問題