我有一个仍在尝试调试的 Perl 脚本,在此过程中我注意到它在 ActivePerl 和 Strawberry Perl 下运行时的行为不同。
这让我想知道 Perl 脚本如何检测它在这些风格中的哪一种下运行。
我有一个仍在尝试调试的 Perl 脚本,在此过程中我注意到它在 ActivePerl 和 Strawberry Perl 下运行时的行为不同。
这让我想知道 Perl 脚本如何检测它在这些风格中的哪一种下运行。
您可以检查两个 perls 是如何编译的
perl -V
一旦找到导致问题的差异,您可以使用Config包检测特定功能。列出所有设置:
perl -MConfig -MData::Dump -e "dd \%Config"
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 中引入,因此它不适用于真正的旧版本。
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。