Linux-Perl : Printing the content of the script I am executing

标签 linux perl

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

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

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

最佳答案

可能有更好的方法来调试脚本(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;
    

关于Linux-Perl : Printing the content of the script I am executing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53367020/

相关文章:

perl - 错误 : "Can' t locate object method "new" via package"in Perl

在 X 中创建隐藏的、不可见的窗口?

linux - 输入密码后如何将linux终端的工作放到后台?

java - 如何在 ubuntu 中从 java 执行 perl 脚本

perl - 如何确定 perl 中数字列表的按位二进制分数?

测试模块上的 Perl 调试器

javascript - 将 href perl 变量转换为普通标量变量

Linux 内核代码中的 C 宏扩展

linux - 使用cgo挂接syscall “fork”

php - 使用 PHPMailer 发送后邮件被换行符破坏