Может ли сценарий Perl определить, работает ли он в Activestate против Strawberry Perl? - PullRequest
3 голосов
/ 10 марта 2011

У меня есть сценарий Perl, который я все еще пытаюсь отлаживать, и в процессе я заметил, что он работает по-разному при работе с ActivePerl и Strawberry Perl.

Это заставило меня задуматься, как сценарий Perlможет обнаружить, под каким из этих ароматов он работает.

Ответы [ 3 ]

8 голосов
/ 10 марта 2011

Вы можете проверить, как оба perl были скомпилированы с

perl -V

Как только вы обнаружите, какая разница вызывает вашу проблему, вы можете обнаружить определенную функцию, используя пакет Config .Для просмотра всех настроек:

perl -MConfig -MData::Dump -e "dd \%Config"
2 голосов
/ 10 марта 2011

ActivePerl в Windows всегда (или, по крайней мере, начиная с 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, поэтому он не будет работать на действительно старых выпусках.

1 голос
/ 03 декабря 2014

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
}

См. http://docs.activestate.com/activeperl/5.8/lib/ActivePerl.html для получения дополнительной информации о модуле ActivePerl.

...