32

有没有办法确定当前文件是否是在 Perl 源代码中执行的文件?在 Python 中,我们使用以下结构来做到这一点:

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

FindBin我可以使用and一起破解一些东西__FILE__,但我希望有一种规范的方式来做到这一点。谢谢!

4

3 回答 3

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

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

于 2009-04-01T19:39:55.410 回答
10

请参阅brian d foy的文章五种改进 Perl 编程的方法中的“应用程序的子类(第 18 章)”部分。

于 2009-04-01T19:43:18.493 回答
4

unless caller很好,但更直接的并行以及更明确的检查是:

use English qw<$PROGRAM_NAME>;

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

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

编辑

请记住,$PROGRAM_NAME(或' $0')是可写的,所以这不是绝对的。但是,在大多数实践中——除了事故或暴发模块——这可能不会改变,或者最多在另一个范围内本地改变。

于 2009-04-02T15:00:16.463 回答