Perl脚本可以检测它是否在Activestate vs Strawberry Perl下运行?

时间:2011-03-10 07:57:53

标签: perl detection activeperl strawberry-perl

我有一个Perl脚本我还在尝试调试,在这个过程中我注意到它在ActivePerl和Strawberry Perl下的运行方式不同。

这让我想知道Perl脚本如何检测它正在运行的这些风格。

3 个答案:

答案 0 :(得分:7)

您可以检查两个perls是如何使用

编译的
perl -V

一旦发现导致问题的区别,就可以使用Config包检测特定功能。列出所有设置:

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

答案 1 :(得分: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中引入,因此它不适用于真正的旧版本。

答案 2 :(得分:1)

ActiveState Perl自版本813.1以来默认提供ActivePerl包(无需加载任何模块),其他版本的Perl可能不提供。至少Strawberry 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