2011-01-05 17 views
38

Jak mogę uzyskać nazwę skryptu?Jak uzyskać nazwę skryptu Perl, który jest uruchomiony?

Na przykład mam skrypt Perla o nazwie XXX.pl. Plik ten zawiera:

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

wyjściowa:

XXX.pl 

Chciałbym porównują to do funkcji CWD, który pozyskuje katalogu skryptów. Potrzebuję funkcji, która również uzyskuje nazwę skryptu.

Odpowiedz

64

Nazwa programu z systemem można znaleźć w zmiennej $0:

print $0; 

man perlvar dla innych zmiennych specjalnych.

+0

Czasami uruchomionym programem nie będzie plik pl, ale zadanie wsadowe, które załadowało i uruchomiło plik pl. Jeśli twoje nazwy plików są podobne do twoich nazw paczek, wypisz "(". Dzwoniący. ")"; jest najbardziej przydatny. – HoldOffHunger

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

PS. getcwd()and friends nie podaję katalogu skryptu! Dają ci katalog roboczy. Jeśli skrypt znajduje się w Twojej zmiennej PATH i po prostu wywołujesz go po nazwie, a nie po pełnej ścieżce, wtedy getcwd() nie zrobi tego, co mówisz. Chcesz dirname($0) (dirname jest również w File::Basename).

+1

To jest niepoprawne; 'dirname ($ 0)' podaje również ścieżkę względną. Jeśli uruchomisz skrypt z 'perl script' lub'./Script', zwróci on ".". – felwithe

7

Być może zainteresuje Cię również informacja o __FILE__ i prawdopodobnie __LINE__, która podaje bieżącą linię i często używam jej razem.

Jeśli chcesz to dla celów debugowania, można również chcą poznać „warn”, „Carp”, „caller”.

2

Wyjazd moduł FindBin, częścią podstawowego dystrybucji Perla. Eksportuje zmienne, których szukasz:

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

Zobacz także http://stackoverflow.com/a/90721/834416 dla bardziej niuansowej odpowiedzi. –

Powiązane problemy