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

时间:2010-11-01 17:35:13

标签: perl

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

例如,在文件调用中test.pl

my $foo = 'bar';
print 'Hello World';
print functionForFilename() . ':' . functionForLineNo();

它会输出:

Hello World
test.pl:3

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__;