我有一个Perl脚本我还在尝试调试,在这个过程中我注意到它在ActivePerl和Strawberry Perl下的运行方式不同。
这让我想知道Perl脚本如何检测它正在运行的这些风格。
答案 0 :(得分:7)
您可以检查两个perls是如何使用
编译的perl -V
一旦发现导致问题的区别,就可以使用Config包检测特定功能。列出所有设置:
perl -MConfig -MData::Dump -e "dd \%Config"
答案 1 :(得分:2)
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。