是否有一个Perl等同于Python的`if __name__ =='__ main __'`?

时间:2009-04-01 19:35:16

标签: python perl executable

有没有办法确定当前文件是否是在Perl源中执行的文件?在Python中,我们使用以下构造执行此操作:

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

我可以使用FindBin__FILE__一起破解某些内容,但我希望有一种规范的方法可以做到这一点。谢谢!

3 个答案:

答案 0 :(得分:45)

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

caller。它在主脚本中返回undef。请注意,这在子例程中不起作用,仅在顶级代码中有效。

答案 1 :(得分:10)

请参阅brian d foy文章Five Ways to Improve Your Perl Programming中的“应用程序的子类(第18章)”部分。

答案 2 :(得分:3)

unless caller很好,但更直接的并行,以及更多显式检查,是:

use English qw<$PROGRAM_NAME>;

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

我以为我会把它放在那里。

编辑

请记住$PROGRAM_NAME(或“$0”)是可写的,所以这不是绝对的。但是,在大多数实践中 - 除了意外事件或横冲直撞的模块 - 这可能不会在另一个范围内更改或更改locally