如何检测perl的ActiveState版本?

mob*_*mob 9 perl activestate

其中一个我CPAN模块不可用的的activeperl通过它的ppm效用.显然,我对这个模块的单元测试太彻底,而且当它试图构建它时,ActiveState的构建过程会超时.

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

我发现这样做的一种方法是:

($is_activestate) = grep /provided by ActiveState/, qx($^X -v)
Run Code Online (Sandbox Code Playgroud)

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

更新:$ENV{ACTIVESTATE_PPM_BUILD}在这些构建期间设置的外观.

ike*_*ami 7

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

info("$_=$ENV{$_}") for sort keys %ENV;
Run Code Online (Sandbox Code Playgroud)

您也可以联系ActiveState并询问他们的建议.


或者,你可以做到这一点,所以最慢的测试只能按需运行(例如,当某个环境存在时).对其他人来说,5分钟的测试似乎也有些过分.


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

  • use Config; print Config::local_patches();返回包含的字符串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 };
Run Code Online (Sandbox Code Playgroud)