如何獲取腳本的名稱?如何獲取正在運行的Perl腳本的名稱
例如,我有一個名爲XXX.pl
的Perl腳本。該文件包含:
$name = #some function that obtains the script's own name
print $name;
輸出:
XXX.pl
我想這個比喻向獲得scripts目錄的CWD功能。我需要一個獲取腳本名稱的函數。
如何獲取腳本的名稱?如何獲取正在運行的Perl腳本的名稱
例如,我有一個名爲XXX.pl
的Perl腳本。該文件包含:
$name = #some function that obtains the script's own name
print $name;
輸出:
XXX.pl
我想這個比喻向獲得scripts目錄的CWD功能。我需要一個獲取腳本名稱的函數。
use File::Basename;
my $name = basename($0);
PS。 getcwd()
and friends不給你腳本的目錄!他們給你的工作目錄。如果腳本在你的PATH中,並且你只是通過名字而不是它的完整路徑來調用它,那麼getcwd()
就不會做你說的話。你想dirname($0)
(dirname也在File::Basename
)。
這是不正確的; 'dirname($ 0)'也給出了相對路徑。如果使用'perl script'或'。/ script'運行腳本,它將返回'。'。 – felwithe 2016-11-02 20:36:16
您可能還有興趣瞭解更多關於__FILE__
,可能還有__LINE__
,它可以爲您提供目前的線路和經常一起使用的線路。
如果您希望用於調試目的,您可能還想了解「warn
」,「Carp
」,「caller
」。
檢出模塊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
另請參閱http://stackoverflow.com/a/90721/834416以獲取更多細微的答案。 – 2015-10-20 22:22:30
有時運行的程序不會是pl文件,而是一個加載並運行pl文件的批處理作業。如果您的文件名與您的軟件包名稱相似,請打印「(」。caller。「)」;是最有用的。 – HoldOffHunger 2017-06-27 18:54:44