什么是;代码(0x1431a90)";是指Perl调试器何时为$DB::sub输出此值?

什么是;代码(0x1431a90)";是指Perl调试器何时为$DB::sub输出此值?,perl,debugging,Perl,Debugging,对于从一个简单的自定义Perl调试器获得的输出,我有一个问题 如果我有这样一个简单的Perl调试器: package DB { sub DB {} sub sub { my ($package, $filename, $line_num, $subroutine, $hasargs, $wantarray, $evaltext, $is_require, $hints, $bitmask, $hinthash) = caller(0); print "

对于从一个简单的自定义Perl调试器获得的输出,我有一个问题

如果我有这样一个简单的Perl调试器:

package DB 
{
  sub DB {}

  sub sub
  { 
    my ($package, $filename, $line_num, $subroutine, $hasargs,
    $wantarray, $evaltext, $is_require, $hints, $bitmask, $hinthash) = caller(0);

    print "$package $DB::sub\n";

    &$DB::sub;
  }
}

1;
我在一个简单的程序上运行它,如下所示(通过
perl-dtest.pl
调用):

并且输出沿以下线路:

main CODE(0x1431a90)
main strict::import
main strict::bits
main CODE(0x1431be0)
main warnings::import
 main::hello
hello world
我的问题是:

“代码(0x1431a90)”部分代表什么?它似乎代表了程序的主体——因为在最顶层没有子例程,这似乎是对程序主执行的内存引用

当我看到调试器打印出“代码(…)”时,我可以对它的含义做出哪些假设?它总是这个“主”代码路径吗?有没有其他特殊的Perl变量可以用来解释程序当时的位置

谢谢


编辑-修订示例1:

参考评论中的讨论,添加其他示例:

#!/usr/bin/env perl

use strict;
use warnings;

sub hello
{
    print "hello world\n";
}

&hello;

print "hi from main\n";
和输出:

main CODE(0x22f0a90)
main strict::import
main strict::bits
main CODE(0x22f0be0)
main warnings::import
 main::hello
hello world
hi from main

code(0x1431a90)
是代码引用的字符串化。

它是代码引用,可能是匿名引用。请参阅中的
coderef2text
方法以获取(近似)实际源代码,并显示文件和行号(您已经从调用方
中提取了行号)以查找从何处调用sub


在示例脚本上运行
B::Deparse::coderef2text
,代码引用解析为

require strict;
do {
    'strict'->import
};


这意味着它们是由
perl
use strict
use warnings
语句中生成和调用的。

谢谢。因此,这些代码引用似乎符合
use strict
使用警告-它们是代码引用,因为main中的调用行不在子例程中吗?但是如果是这样的话,那么在我刚刚添加的修改后的示例中,为什么主
hi
显示时没有代码引用?谢谢非常感谢-非常有帮助
require strict;
do {
    'strict'->import
};
use strict 'refs';
require warnings;
do {
    'warnings'->import
};