2009-04-01 16 views
29

現在のファイルがPerlソースで実行されているファイルかどうかを判断する方法はありますか? Pythonでは、我々は次の構文でこれを行う:Pythonの `if __name__ == '__main __'`に相当するPerlはありますか?

if __name__ == '__main__': 
    # This file is being executed. 
    raise NotImplementedError 

私はFindBin__FILE__を使用して、一緒に何かをハックすることができますが、私はこれを行うための標準的な方法があります願っています。ありがとう!

答えて

41
unless (caller) { 
    print "This is the script being executed\n"; 
} 

callerを参照してください。メインスクリプトにundefを返します。これはサブルーチン内では機能しません。最上位レベルのコードでのみ機能します。

3

unless callerは良いですが、より直接的なパラレルだけでなく、より多くの明示的なチェック、次のとおりです。

use English qw<$PROGRAM_NAME>; 

if ($PROGRAM_NAME eq __FILE__) { 
    ... 
} 

はちょうど私がそこにそれを出すだろうと思っていました。

EDIT

$PROGRAM_NAME(または '$0')が書き込み可能であることを覚えておいてください、これは絶対的ではありません。しかし、事故やモジュールの急増を除いて、ほとんどの場合、これは変更されない可能性があります。また、多くの場合、別のスコープ内でlocallyに変更される可能性があります。

+0

これは動作するとは限りません。一つのこととして、$ 0($ PROGRAM_NAMEの実名)は実際にはPerlで書き込み可能な変数です。しかし、__FILE__は$ 0を変更しても影響を受けません。 – cjm

+0

@cjm:免責事項を追加しました。 – Axeman

+0

$ 0は変更可能なだけでなく、[__FILE__'](http://perldoc.perl.org/perlsyn.html#Plain-Old-Comments-%28Not%21%29)です。 – tchrist

関連する問題