39

是否可以在 Perl 中获取当前源代码行号?C++ 中的等价物是__LINE__.

4

4 回答 4

63

__LINE__文字记录在perldata 手册页的特殊文字部分。

print "File: ", __FILE__, " Line: ", __LINE__, "\n";

或者

warn("foo");
于 2008-12-10T09:01:07.287 回答
8

请注意,有一个问题

perl -e'warn("foo")'

foo 在 -e 第 1 行。

如果它以换行符结尾,则不会打印行号

perl -e'warn("foo\n")'

这在“perldoc -f die”中有记录,但在“perldoc -f warn”部分对 die 的引用中可能很容易错过......

于 2008-12-11T02:34:26.100 回答
1

这会打印出您所在的行,以及“堆栈”(来自调用程序(脚本/模块/等)的行列表,这些行指向您现在所在的位置)

while(my @where=caller($frame++)) { print "$frame:" . join(",",@where) . "\n"; }
于 2012-02-26T13:26:38.190 回答
1

“使用 Carp”并使用各种例程,您还会得到一个堆栈 - 不确定这种方式是否比 cnd 建议的“调用者”方法更好或更差。我在 C 和 Perl 中使用了 LINE 和 FILE 变量(可能还有其他类似的变量)来显示我在调试时在代码和其他信息中的位置,但在调试环境之外没有看到什么价值。

于 2014-10-17T22:28:48.643 回答