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]
总是可以检查所有这些。
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/