Как сценарий Perl может определить, работает ли он в Komodo IDE?
-
19-09-2019 - |
Вопрос
Один из способов, который я нашел, — проверить, «загружен» ли отладчик Perl, проверив определено ($DB::сингл) и предполагая, что Komodo активен, если определен $DB::single..
Но это также может означать, что сценарий законно работает как перл -д под «автономным» отладчиком.
#!/usr/local/ActivePerl-5.10/bin/perl
use strict;
use warnings;
use feature qw/say switch/;
# detect debugger ..
SayDebugerStatus();
sub SayDebugerStatus {
print "Debugger ";
given ($DB::single) {
when (undef) {
say "not loaded.";
}
when (0) {
say "loaded but inactive";
}
default {
say "loaded and active";
}
}
return defined($DB::single) ? 1:0;
}
заковыряПредложение s приводит к:
if ( grep( /.*Komodo\ IDE\.app/g, values %INC) ){
say "Komodo is running"
} else {
say "Komodo is not running"
};
Но есть ли другой путь?
ОБНОВЛЯТЬ сегодня моя процедура isKomodo() не удалась.Некоторое расследование показало, что ИТ-специалисты изменили настройки моего глобального пути с «длинных» на «короткие» имена (это под Windows)..в хеше %INC больше нет строки «KOMODO».
Ищу замену.
Решение
Что содержит ваш %INC, когда вы запускаете скрипт под Komodo?Есть большая вероятность, что загружены некоторые модули, специфичные для Komodo.Лучше распечатать его содержимое с помощью:
use Data::Dumper;
print Dumper \%INC;
Другие советы
Кажется, что-то вроде этого проще (чтобы скрипт знал, что он работает под Komodo):
use Modern::Perl;
if (exists $ENV{'KOMODO_VERSION'}) {
say "Script is running under Komodo $ENV{'KOMODO_VERSION'} !";
} else {
say "script is not running in Komodo"
}
ОБНОВЛЕНИЕ (от lexu):KOMODO (7) теперь помещает KOMODO_VERSION в среду.