2009-04-01 15 views
29

C'è un modo per determinare se il file corrente è quello che viene eseguito nel sorgente Perl? In Python facciamo questo con la seguente costrutto:Esiste un Perl equivalente a `if __name__ == '__main __'` di Python?

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

posso incidere qualcosa insieme utilizzando FindBin e __FILE__, ma sto sperando che ci sia un modo canonico di fare questo. Grazie!

risposta

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

Vedere caller. Restituisce undef nello script principale. Si noti che non funziona all'interno di una subroutine, solo nel codice di primo livello.

3

unless caller è buono, ma un parallelo più diretto, così come una più controllo esplicito, è:

use English qw<$PROGRAM_NAME>; 

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

Ho pensato di mettere che là fuori.

EDIT

Tenete a mente che $PROGRAM_NAME (o '$0') è scrivibile, quindi questo non è assoluto. Ma, nella maggior parte delle pratiche - tranne che in caso di incidente o moduli scatenati - questo probabilmente non sarà cambiato, o modificato al massimo locally in un altro ambito.

+0

Non è garantito il funzionamento. Per prima cosa, $ 0 (il vero nome di $ PROGRAM_NAME) è in realtà una variabile scrivibile in Perl. Ma __FILE__ non viene modificato cambiando $ 0. – cjm

+0

@cjm: aggiunta la dichiarazione di non responsabilità. – Axeman

+0

Non solo $ 0 è mutabile, [quindi è '__FILE__'] (http://perldoc.perl.org/perlsyn.html#Plain-Old-Comments-%28Not%21%29). – tchrist

Problemi correlati