是否可以打印我正在执行的脚本的全部内容?
由于脚本中将发生许多事情,例如我将在运行时调用的调用perl模块(需要“ / dir / file”;),所以我正在数组(foreach(@array)中执行的打印行){打印“ $ _ \ n”;})。
我为什么需要这个?为了研究我正在制作的脚本,特别是在发生错误时。在2000行发生错误(即使我只有1000行脚本)。
答案 0 :(得分:3)
可能有更好的方法来调试脚本(perl调试器,使用Carp::Always
获取具有任何错误和警告的堆栈跟踪),但是至少有 two 三种机制用于获取正在运行的脚本的源代码。
由于$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;