如何检测 Perl 的 ActiveState 版本?

How to detect ActiveState version of perl?

尝试构建时 my CPAN modules is not available on ActivePerl through its ppm utility. Apparently my unit testing for this module is too thorough and ActiveState's build process times out 之一。

所以我想在我的测试中做的是检测我的模块何时在 ActivePerl 上构建,如果是,则为构建过程提供更小更快的一组测试。

One way I've found to do this 是:

($is_activestate) = grep /provided by ActiveState/, qx($^X -v)

但我想知道是否有更轻量级的选项。始终(且仅)在 ActivePerl 中设置的环境变量? Config 里有什么?还有其他建议吗?

更新: 看起来 $ENV{ACTIVESTATE_PPM_BUILD} 是在这些构建过程中设置的。

检查它是否在 ActivePerl 构建下 运行ning 不是最佳选择。理想情况下,您想检查它是否在 ActiveState 的构建环境中 运行ning。我会在 t/00-use.t 中转储环境,看看他们是否设置了一些变量来指示这一点。

info("$_=$ENV{$_}") for sort keys %ENV;

您也可以联系 ActiveState 并询问他们有什么建议。


或者,您可以使最慢的测试仅 运行 按需进行(例如,当存在特定环境时)。 5 分钟的测试对其他人来说似乎也有点过分。


至于检查您是否运行正在构建 ActiveState,这里有一些可能性:

  • use Config; print Config::local_patches(); returns 包含 ActivePerl Build.
  • 的字符串
  • $Config{cf_email} 设置为 support@ActiveState.com
  • ActivePerl::Config 模块存在。
  • ActivePerl::PPM 模块存在。

总是可以检查所有这些。

use Config qw( %Config );

my $is_activeperl = 0;
$is_activeperl ||= eval { Config::local_patches() =~ /ActivePerl/i };
$is_activeperl ||= $Config{cf_email} =~ /ActiveState/i;
$is_activeperl ||= eval { require ActivePerl::Config };
$is_activeperl ||= eval { require ActivePerl::PPM };

根据对 activeperl ppm build increase timeout 的快速搜索,您可以将这种情况报告给他们的邮件 list/support,他们将手动增加模块构建的超时值。