2009-04-01 6 views
29

Czy istnieje sposób ustalenia, czy bieżący plik jest tym, który jest wykonywany w źródle Perla? W Pythonie możemy to zrobić z następującej konstrukcji:Czy istnieje odpowiednik Perla dla `jeśli __name__ == '__main __'`?

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

mogę siekać coś razem używając FindBin i __FILE__, ale mam nadzieję, że to kanoniczny sposób to zrobić. Dzięki!

Odpowiedz

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

Zobacz caller. Zwraca undef w skrypcie głównym. Zauważ, że to nie działa wewnątrz podprogramu, tylko w kodzie najwyższego poziomu.

3

unless caller jest dobry, ale bardziej bezpośrednie równoległe, jak również bardziej jednoznaczne sprawdzenie jest:

use English qw<$PROGRAM_NAME>; 

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

Pomyślałem, że mogę umieścić tam.

EDIT

Należy pamiętać, że $PROGRAM_NAME (lub '$0') jest zapisywalny, więc to nie jest absolutne. Jednak w większości przypadków - z wyjątkiem wypadków lub szalejących modułów - prawdopodobnie nie ulegnie to zmianie lub zmieni się najwyżej locally w innym zakresie.

+0

To nie gwarantuje pracy. Po pierwsze, 0 USD (prawdziwa nazwa $ PROGRAM_NAME) jest właściwie zapisywalną zmienną w Perlu. Ale zmiana _ 0FILE__ nie ma wpływu na zmianę 0 USD. – cjm

+0

@cjm: Dodano zastrzeżenie. – Axeman

+0

Nie tylko wartość 0 jest zmienna, [tak jak "__FILE__"] (http://perldoc.perl.org/perlsyn.html#Plain-Old-Comments-%28Not%21%29). – tchrist

Powiązane problemy