27 votes

Existe-t-il un équivalent en Perl de l'expression "if __name__ == '__main__'`" de Python ?

Existe-t-il un moyen de déterminer si le fichier courant est celui qui est exécuté dans le source Perl ? En Python, nous le faisons avec la construction suivante :

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

Je peux bricoler quelque chose en utilisant FindBin y __FILE__ mais j'espère qu'il y a une façon canonique de le faire. Merci.

38voto

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

Voir appelant . Il retourne undef dans le script principal. Notez que cela ne fonctionne pas à l'intérieur d'une sous-routine, seulement dans le code de niveau supérieur.

9voto

Chas. Owens Points 40887

Voir la partie "Sous-classes pour les applications (chapitre 18)" de l'ouvrage intitulé brian d foy L'article Cinq façons d'améliorer votre programmation en Perl .

3voto

Axeman Points 24103

unless caller est une bonne chose, mais un parallèle plus direct, ainsi qu'une plus contrôle explicite c'est :

use English qw<$PROGRAM_NAME>;

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

J'ai juste pensé que je devais mettre ça là-bas.

EDIT

Gardez à l'esprit que $PROGRAM_NAME (ou ' $0 ') est accessible en écriture, donc ce n'est pas absolu. Mais, dans la plupart des cas - sauf en cas d'accident, ou de modules déchaînés - cela ne sera probablement pas modifié, ou alors tout au plus localement dans un autre périmètre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X