4

我发现的一种方法是通过检查defined($DB::single)并假设 Komodo 处于活动状态,如果定义了 $DB::single 来检查 Perl 调试器是否“加载”。

但这也可能意味着脚本在“独立”调试器下以perl -d的身份合法运行。

#!/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;
}

zakovyrya的建议导致:

if ( grep( /.*Komodo\ IDE\.app/g,  values %INC) ){
    say "Komodo is running"
} else {
   say "Komodo is not running"
};

但是还有其他方法吗?


今天更新我的 isKomodo() 例程失败。一些调查表明,IT 将我的全局路径设置从“长”名称更改为“短”名称(这是在 Windows 下).. %INC 哈希中不再有“KOMODO”字符串..

我正在寻找替代品。

4

2 回答 2

2

当您在 Komodo 下启动脚本时,您的 %INC 包含什么?很有可能会加载一些 Komodo 特定的模块。最好用以下方式打印其内容:

use Data::Dumper;
print Dumper \%INC;
于 2009-07-28T16:21:05.843 回答
2

似乎这样的事情更容易(让脚本知道它在 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"
}

UPDATE(by 'lexu): KOMODO (7) 现在将 KOMODO_VERSION 放置在环境中

于 2010-11-18T17:13:27.370 回答