是否可以打印我正在执行的脚本的全部内容?
由于脚本内部会发生很多事情,例如调用 perl 模块,我将在运行时调用(需要“/dir/file”;),因此我在数组内执行的打印行(foreach(@array ) {打印“$_\n”;})。
为什么我需要这个?研究我正在制作的脚本生成,尤其是在发生错误时。错误发生在第 2000 行(即使我只有 1000 行脚本)。
最佳答案
可能有更好的方法来调试脚本(perl 调试器,使用 Carp::Always
来获取包含任何错误和警告的堆栈跟踪),但至少有 两种三种获取运行脚本源代码的机制。
由于
$0
包含 perl 正在执行的文件的名称,因此您可以从中读取。open my $fh, '<', $0; my @this_script = <$fh>; close $fh;
如果脚本的源代码中有
__DATA__
或__END__
标记,则 Perl 还会设置DATA
文件句柄。最初,DATA
文件句柄指向后面的文本__DATA__
或__END__
标记,但它实际上是对整个源文件打开的,因此您可以seek
到该文件句柄的开头,然后访问整个脚本。seek DATA, 0, 0; my @this_script = <DATA>;
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/