Perl スクリプトは Komodo IDE 内で実行されているかどうかをどのように検出できますか?

StackOverflow https://stackoverflow.com/questions/1195175

  •  19-09-2019
  •  | 
  •  

質問

私が見つけた 1 つの方法は、Perl デバッガーが「ロード」されているかどうかを確認することです。 定義済み($DB::single) $DB::single が定義されている場合、Komodo がアクティブであると仮定します。

ただし、これは、スクリプトが正当に実行されていることも意味する可能性があります。 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;
}

ザコヴィリヤの提案は次のことにつながります。

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

しかし、別の方法はあるでしょうか?


アップデート 今日、isKomodo() ルーチンが失敗しました。調査によると、IT 部門がグローバル パス設定を「長い」名前から「短い」名前に変更したことがわかりました (これは Windows でのことです)。%INC ハッシュには「KOMODO」文字列はなくなりました。

代わりの人を探しています。

役に立ちましたか?

解決

Komodo でスクリプトを起動すると、%INC には何が含まれますか?いくつかの 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 を配置するようになりました

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top