perl - 如何获取创建 Perl 子例程引用的文件和行号?

标签 perl

给定子程序引用,有没有办法找出声明子程序的文件和行号?警告和 friend 似乎做对了,但我在外部需要这个。这是我的测试程序:

#!/usr/bin/perl -l

use strict;
use warnings;
use B;

# line 99 'bin/some_code.pl'
{
    no strict 'refs';
    print B::svref_2object(\*{'Foo::some_sub'})->LINE;
    print B::svref_2object(\&Foo::some_sub)->GV->LINE;
}
Foo::some_sub();

package Foo;
# line 23 'bin/some_file.pl'
sub some_sub {
    warn "Got to here";
}

输出:
102
102
Got to here at 'bin/some_file.pl' line 24.

行信息不是我所期望的,所以我假设我做错了什么(B::GV 有一个相应的 FILE 方法,但在我让 LINE 工作之前,它对我来说没有多大用处)。

还有其他方法可以获取此信息吗?我在上面的代码中做错了吗?

更新:事实证明,如果我不使用 line 指令,'FILE' 和 'LINE' 方法似乎可以正常工作。看起来这可能是 B::GV 模块中的错误。

最佳答案

你可以试试看 caller .这是调试器用来构建堆栈跟踪的内容,所以也许这就是您想要的。

我不认为__LINE__ , __FILE____PACKAGE__在这里为您提供帮助,因为它们仅提供当前执行点的位置,这意味着给定代码引用或子代码,您将获得相同的结果。

关于perl - 如何获取创建 Perl 子例程引用的文件和行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/503769/

相关文章:

javascript - 如何在 Mojolicious perl 中正确加载 Javascript 文件?

regex - 如何将段落重新换行至特定行长?

perl - 使用 local::lib 模块时出现的问题

perl - 使用相同的语法按 2 条规则分割线

linux + 打印 linux 版本(一个字符如 5 或 6 .. 等)

python - Linux:将文件的列拆分为多个文件

regex - 解析 StarTeam 命令行客户端输出

html - 我使用哪个 Perl 模块将 Pod 转换为 HTML?

python - 按字符串变量对列重新排序

使用 DBI 模块和 Oracle 8 的 Perl 脚本停止处理