如何在Perl中获取文件名和行号?

如何在Perl中获取文件名和行号?,perl,Perl,我想获取Perl脚本中的当前文件名和行号。我该怎么做 例如,在文件调用test.pl中: my $foo = 'bar'; print 'Hello, World!'; print functionForFilename() . ':' . functionForLineNo(); 它将输出: Hello, World! test.pl:3 如“特殊文字”中所述,这些标记可与\uuuuu行和\uuuu文件标记一起使用: 特殊文字_文件_、_行_和_包_u表示程序中该点的当前文件名、行号和包名

我想获取Perl脚本中的当前文件名和行号。我该怎么做

例如,在文件调用
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
指令,不是关于疯狂,也就是所谓的源代码过滤器。