我想在Perl脚本中获取当前文件名和行号。我该怎么做?
例如,在文件调用中test.pl
:
my $foo = 'bar';
print 'Hello World';
print functionForFilename() . ':' . functionForLineNo();
它会输出:
Hello World
test.pl:3
答案 0 :(得分:13)
__LINE__
和__FILE__
令牌可以使用这些令牌,如{特殊字面值下的perldoc perldata中所述:
特殊文字__FILE __,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _它们只能用作单独的代币;它们不会插入字符串中。如果没有当前包(由于包空;指令),__PACKAGE__是未定义的值。
答案 1 :(得分:8)
caller
功能可以满足您的需求:
sub print_info {
my ($package, $filename, $line) = caller;
...
}
print_info(); # prints info about this line
这将从调用sub的位置获取信息,这可能就是您要查找的内容。 __FILE__
和__LINE__
指令仅适用于它们的写入位置,因此您无法将其效果封装在子例程中。 (除非你想要一个只打印有关它定义位置信息的子句)
答案 2 :(得分:6)
您可以使用:
print __FILE__. " " . __LINE__;