在Perl中是否可以获得当前源代码行号?在C++中的等效方法是__LINE__。
__LINE__
mutmk8jj1#
__LINE__文字记录在perldata man page的“特殊文字”部分中。
print "File: ", __FILE__, " Line: ", __LINE__, "\n";
或
warn("foo");
kqqjbcuj2#
请注意,这里有一个
$ perl -e'warn("foo")' foo at -e line 1.
如果它以换行符结束,则 * 不会 * 打印行号
$ perl -e'warn("foo\n")' foo
这在perldoc -f die中有说明,但在perldoc -f warn部分对die的引用中可能很容易忽略。
perldoc -f die
perldoc -f warn
die
jhdbpxl93#
这将打印出您所在的行,以及“堆栈”(从调用程序(脚本/模块等)到您当前所在位置的行列表)
while(my @where=caller($frame++)) { print "$frame:" . join(",",@where) . "\n"; }
yruzcnhs4#
“use Carp”并使用各种例程,您还可以得到一个堆栈-不确定这种方法是否比cnd建议的“caller”方法更好或更差。我在C和Perl中使用了LINE和FILE变量(可能还有其他类似的变量)来显示我在调试时从代码和其他信息中获得的位置,但在调试环境之外几乎没有看到任何价值。
4条答案
按热度按时间mutmk8jj1#
__LINE__
文字记录在perldata man page的“特殊文字”部分中。或
kqqjbcuj2#
请注意,这里有一个
如果它以换行符结束,则 * 不会 * 打印行号
这在
perldoc -f die
中有说明,但在perldoc -f warn
部分对die
的引用中可能很容易忽略。jhdbpxl93#
这将打印出您所在的行,以及“堆栈”(从调用程序(脚本/模块等)到您当前所在位置的行列表)
yruzcnhs4#
“use Carp”并使用各种例程,您还可以得到一个堆栈-不确定这种方法是否比cnd建议的“caller”方法更好或更差。我在C和Perl中使用了LINE和FILE变量(可能还有其他类似的变量)来显示我在调试时从代码和其他信息中获得的位置,但在调试环境之外几乎没有看到任何价值。