Perl:检查您的文件是作为模块加载还是直接运行

Pau*_*rth 3 perl module

如何在Perl中编写测试以查看我的文件是直接运行还是从其他来源导入?我想这样做可以很容易地将所有内容捆绑在一个文件中,但仍然可以针对这些函数编写单元测试.我的想法是有这样的事情:

if (running_directly()) {
  main();
}

def main {
  this();
  that();
}

def this {
  # ...
}

def that {
  # ...
}
Run Code Online (Sandbox Code Playgroud)

然后在一个单独的perl脚本中,我可以加载原始文件并调用它作为单元测试.

我记得以前见过这个,但我不记得怎么做了.我想避免针对某个已知值测试$ 0,因为这意味着用户无法重命名脚本.

fri*_*edo 11

首先,Perl没有def关键字.:)

但您可以通过执行以下操作来检查模块是直接执行还是包含在其他位置:

__PACKAGE__->main unless caller;
Run Code Online (Sandbox Code Playgroud)

因为caller如果你在调用堆栈的顶部,将不会返回任何内容,但如果你在一个use或多个内部,它将会返回require.

有些人已将可怕的新词"modulino"分配给这种模式,因此将其用作Google的燃料.