2011-01-05 65 views
38

如何獲取腳本的名稱?如何獲取正在運行的Perl腳本的名稱

例如,我有一個名爲XXX.pl的Perl腳本。該文件包含:

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

輸出:

XXX.pl 

我想這個比喻向獲得scripts目錄的CWD功能。我需要一個獲取腳本名稱的函數。

回答

64

正在運行的程序的名稱可以在$0變量中找到:

print $0; 

man perlvar其他特殊變量。

+0

有時運行的程序不會是pl文件,而是一個加載並運行pl文件的批處理作業。如果您的文件名與您的軟件包名稱相似,請打印「(」。caller。「)」;是最有用的。 – HoldOffHunger 2017-06-27 18:54:44

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

PS。 getcwd()and friends不給你腳本的目錄!他們給你的工作目錄。如果腳本在你的PATH中,並且你只是通過名字而不是它的完整路徑來調用它,那麼getcwd()就不會做你說的話。你想dirname($0)(dirname也在File::Basename)。

+1

這是不正確的; 'dirname($ 0)'也給出了相對路徑。如果使用'perl script'或'。/ script'運行腳本,它將返回'。'。 – felwithe 2016-11-02 20:36:16

7

您可能還有興趣瞭解更多關於__FILE__,可能還有__LINE__,它可以爲您提供目前的線路和經常一起使用的線路。

如果您希望用於調試目的,您可能還想了解「warn」,「Carp」,「caller」。

2

檢出模塊FindBin,它是Perl核心發行版的一部分。它會導出要查找的變量

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以獲取更多細微的答案。 – 2015-10-20 22:22:30

相關問題