my CPAN modules之一是ActivePerl上通过其ppm实用程序提供的not available。显然,我对这个模块的单元测试太彻底了,在尝试构建它时用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构建下运行不是最佳选择。理想情况下,您要检查它是否在ActiveState的构建环境中运行。我将在t/00-use.t中转储环境,以查看它们是否设置了一些变量来表明这一点。

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

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

或者,您可以这样做,以便最慢的测试仅按需运行(例如,在存在特定环境时)。 5分钟的测试对其他人似乎也有些多余。

至于检查您是否正在运行ActiveState构建,可以使用以下几种方法:
  • use Config; print Config::local_patches();返回包含ActivePerl Build的字符串。
  • $Config{cf_email}设置为[email protected]
  • 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 };
    

    关于perl - 如何检测ActiveState版本的Perl?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37056509/

    10-13 07:36