【问题标题】:Is there a Perl equivalent to Python's `if __name__ == '__main__'`?是否有与 Python 的 `if __name__ == '__main__'` 等价的 Perl?
【发布时间】:2010-10-16 23:03:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: python perl executable


    【解决方案1】:
    unless (caller) {
      print "This is the script being executed\n";
    }
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        use English qw<$PROGRAM_NAME>;
        
        if ( $PROGRAM_NAME eq __FILE__ ) { 
            ...
        }
        

        只是想我会把它放在那里。

        编辑

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

        【讨论】:

        • 这不能保证有效。一方面,$0($PROGRAM_NAME 的真实名称)实际上是 Perl 中的可写变量。但 FILE 不受更改 $0 的影响。
        • $0 不仅是可变的,so is __FILE__.
        猜你喜欢
        • 1970-01-01
        • 2011-01-15
        • 2021-10-20
        • 2010-11-01
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        • 2011-02-27
        • 2011-07-10
        相关资源
        最近更新 更多