【问题标题】:Linux - Perl: Printing the content of the script I am executingLinux - Perl:打印我正在执行的脚本的内容
【发布时间】:2018-11-19 00:54:53
【问题描述】:

是否可以打印我正在执行的脚本的全部内容?

由于脚本中会发生很多事情,比如我将在运行时调用的调用 perl 模块(需要“/dir/file”;),所以我在数组中执行的打印行(foreach(@array ) {print "$_\n";})。

我为什么需要这个?研究我正在制作的脚本生成,尤其是在发生错误时。第 2000 行发生错误(即使我只有 1000 行脚本)。

【问题讨论】:

  • "第 2000 行发生错误(即使我只有 1000 行脚本)。"这没有意义,并且指向文件不匹配或源过滤器。要求外部文件和运行循环不会随意创建新的源代码行。

标签: linux perl


【解决方案1】:

可能有更好的方法来调试脚本(perl 调试器,使用 Carp::Always 获取带有任何错误和警告的堆栈跟踪),但至少有 两个 三种机制来获取运行脚本的源代码。

  1. 由于$0 包含perl 正在执行的文件的名称,您可以从中读取。

    open my $fh, '<', $0;
    my @this_script = <$fh>;
    close $fh;
    
  2. 如果脚本的源代码中有__DATA____END__ 标记,那么Perl 也会设置DATA 文件句柄。最初,DATA 文件句柄指向后面的文本 __DATA____END__ 令牌,但它实际上是对整个源文件打开的,因此您可以 seek 到该文件句柄的开头并访问整个脚本。

    seek DATA, 0, 0;
    my @this_script = <DATA>;
    
  3. HT Grinnz:任何 Perl 源文件中的标记 __FILE__ 指的是包含该标记的文件的名称

    open my $fh, '<', __FILE__;
    my @this_file = <$fh>;
    close $fh;
    

【讨论】:

  • 我建议打开__FILE__,而不是$0,因为$0 可以修改,不一定是当前文件的开头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多