Is there a Perl equivalent to Python's `if __name__ == '__main__'`?

Question:

Is there a way to determine if the current file is the one being executed in Perl source? In Python we do this with the following construct:

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

I can hack something together using FindBin and __FILE__, but I’m hoping there’s a canonical way of doing this. Thanks!

Asked By: cdleary

||

Answers:

unless (caller) {
  print "This is the script being executedn";
}

See caller. It returns undef in the main script. Note that that doesn’t work inside a subroutine, only in top-level code.

Answered By: cjm

See the “Subclasses for Applications (Chapter 18)” portion of brian d foy‘s article Five Ways to Improve Your Perl Programming.

Answered By: Chas. Owens

unless caller is good, but a more direct parallel, as well as a more explicit check, is:

use English qw<$PROGRAM_NAME>;

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

Just thought I’d put that out there.

EDIT

Keep in mind that $PROGRAM_NAME (or ‘$0‘) is writable, so this is not absolute. But, in most practice–except on accident, or rampaging modules–this likely won’t be changed, or changed at most locally within another scope.

Answered By: Axeman
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.