2011-01-05 23 views
38

スクリプトの名前はどのように取得できますか?実行中のPerlスクリプトの名前を取得する方法

たとえば、名前がXXX.plのPerlスクリプトがあります。このファイルには含まれています

$name = #some function that obtains the script's own name 
print $name; 

出力:私は、スクリプトのディレクトリを取得CWD機能にこれを例えるたい

XXX.pl 

。スクリプトの名前も取得する関数が必要です。

答えて

64

実行中のプログラムの名前が$0変数で見つけることができます。

+0

実行中のプログラムはplファイルではなく、plファイルをロードして実行したバッチジョブであることがあります。あなたのファイル名があなたのパッケージ名に似ているなら、 "("。caller。 ")";最も有用です。 – HoldOffHunger

40
use File::Basename; 
my $name = basename($0); 

PS。 getcwd()and friendsあなたにスクリプトのディレクトリを教えてください!彼らはあなたに作業ディレクトリを与えます。スクリプトがPATHにあり、フルパスではなく名前で呼び出すだけなら、getcwd()はあなたの言うことをしません。 dirname($0)が必要です(住所もFile::Basenameにあります)。他の特殊変数について

print $0; 

man perlvar

+1

これは間違っています。 'dirname($ 0)'も相対パスを与えます。 'perl script'や'。/ script'を使ってスクリプトを実行すると、 '。'が返されます。 – felwithe

7

また、__FILE__とおそらく__LINE__について学ぶことに興味があります。これは現在の行を提供し、よく一緒に使用します。

デバッグの目的でこれを使用する場合は、「」、「Carp」、「caller」について学ぶこともできます。

2

Core Perlディストリビューションの一部であるFindBinモジュールをチェックしてください。それはあなたが探している変数をエクスポートします

EXPORTABLE VARIABLES 
     $Bin   - path to bin directory from where script was invoked 
     $Script  - basename of script from which Perl was invoked 
     $RealBin  - $Bin with all links resolved 
     $RealScript - $Script with all links resolved 
+0

さらに詳細な答えはhttp://stackoverflow.com/a/90721/834416を参照してください。 –

関連する問題