如何在Perl中获取文件名和行号?
我想获取Perl脚本中的当前文件名和行号。我该怎么做 例如,在文件调用如何在Perl中获取文件名和行号?,perl,Perl,我想获取Perl脚本中的当前文件名和行号。我该怎么做 例如,在文件调用test.pl中: my $foo = 'bar'; print 'Hello, World!'; print functionForFilename() . ':' . functionForLineNo(); 它将输出: Hello, World! test.pl:3 如“特殊文字”中所述,这些标记可与\uuuuu行和\uuuu文件标记一起使用: 特殊文字_文件_、_行_和_包_u表示程序中该点的当前文件名、行号和包名
test.pl
中:
my $foo = 'bar';
print 'Hello, World!';
print functionForFilename() . ':' . functionForLineNo();
它将输出:
Hello, World!
test.pl:3
如“特殊文字”中所述,这些标记可与
\uuuuu行
和\uuuu文件
标记一起使用:
特殊文字_文件_、_行_和_包_u表示程序中该点的当前文件名、行号和包名。它们只能用作单独的代币;它们不会被插入到字符串中。如果没有当前包(由于一个空包;指令),\uuuu package\uuuuuu是未定义的值
您可以使用:
print __FILE__. " " . __LINE__;
调用者
函数将执行您正在查找的操作:
sub print_info {
my ($package, $filename, $line) = caller;
...
}
print_info(); # prints info about this line
这将从调用sub的位置获取信息,这可能就是您要查找的内容。
\uuuu文件
和\uuuuu行
指令仅适用于它们的写入位置,因此不能将它们的效果封装在子例程中。(除非您想要一个只打印有关定义位置信息的sub)前提是它们没有被欺骗。@tchrist:是的,源代码筛选会搞糟很多事情:)不仅仅是这些。您还可以修改使用\uuuuu文件
和\uuuu行指令给您的值,然后有几个perl错误会导致\uuuu行
在各种情况下稍微关闭。perl-x
也会重置\uuuuu行,但我一直在考虑\u35; LINE
指令,不是关于疯狂,也就是所谓的源代码过滤器。