【问题标题】:How do I get the filename and line number in Perl?如何在 Perl 中获取文件名和行号?
【发布时间】:2010-11-01 17:35:13
【问题描述】:

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

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

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

它会输出:

Hello, World!
test.pl:3

【问题讨论】:

标签: perl


【解决方案1】:

这些可用于__LINE____FILE__ 令牌,如“特殊文字”下的perldoc perldata 中所述:

特殊文字 __FILE__、__LINE__ 和 __PACKAGE__ 表示程序中该点的当前文件名、行号和包名。它们只能用作单独的令牌;它们不会被插入到字符串中。如果没有当前包(由于一个空包;指令), __PACKAGE__ 是未定义的值。

【讨论】:

  • 只要他们没有被骗。
  • @tchrist:是的,源过滤搞砸了很多事情 :)
  • 不只是那些。您还可以使用 #line 指令修改 __FILE____LINE__ 给您的值,然后有几个 perl 错误导致 __LINE__ 在各种情况下略有偏差。
  • perl -x 也将重置__LINE__,但我在考虑#line 指令,而不是关于源过滤器的疯狂。
【解决方案2】:

caller 函数将满足您的需求:

sub print_info {
   my ($package, $filename, $line) = caller;
   ...
}

print_info(); # prints info about this line

这将从调用 sub 的位置获取信息,这可能是您要查找的信息。 __FILE____LINE__ 指令仅适用于它们的编写位置,因此您不能将它们的效果封装在子例程中。 (除非您想要一个仅打印有关其定义位置的信息的子程序)

【讨论】:

    【解决方案3】:

    你可以使用:

    print __FILE__. " " . __LINE__;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-25
      • 2018-09-04
      • 1970-01-01
      • 2012-09-10
      • 2011-04-26
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多