4

我有一个仍在尝试调试的 Perl 脚本,在此过程中我注意到它在 ActivePerl 和 Strawberry Perl 下运行时的行为不同。

这让我想知道 Perl 脚本如何检测它在这些风格中的哪一种下运行。

4

3 回答 3

8

您可以检查两个 perls 是如何编译的

perl -V

一旦找到导致问题的差异,您可以使用Config包检测特定功能。列出所有设置:

perl -MConfig -MData::Dump -e "dd \%Config"
于 2011-03-10T09:01:45.377 回答
3

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 中引入,因此它不适用于真正的旧版本。

于 2011-03-10T18:06:14.397 回答
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

于 2014-12-03T12:13:34.477 回答