Linux-Perl:打印我正在执行的脚本的内容

时间:2018-11-19 00:54:53

标签: linux perl

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

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

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

1 个答案:

答案 0 :(得分:3)

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

  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;