如何打印所有已执行的子例程?例程

2023-09-03 13:06:12 作者:流星是天使的眼淚

例如,我有以下Perl脚本

{ 
    package A;

    {
        package B;

        sub _y {
            print "Just Another Perl Hacker
";

        }

    }

    sub _x {
        print "Hello world!
";
        B::_y();
    }
}


use strict;
use warnings;

_x();

如何将每个带有包限定符的已执行SUB打印到STDERR或任何日志文件?

详细介绍S7 200 SMART运动向导的组态

例如,在上面的脚本中,我预计会看到以下输出:

1 A::_x()
2 B::_y()

我认为可以使用像devel::NYTProf这样的调试器,但我还没有找到用于该简单任务的特定调试器模块或它们的参数。

有什么想法吗?

推荐答案

可以使用标准perl调试器:

$ PERLDB_OPTS="NonStop frame=1" perl -d prog.pl
  entering CODE(0x260cd78)
   entering strict::import
  entering CODE(0x260cd18)
   entering warnings::import
Package try.pl.
  entering DB::Obj::_init
  entering A::_x
Hello world!
   entering B::_y
Just Another Perl Hacker

(请注意,我必须将_x();更改为A::_x();才能运行您的代码。)

如果要将输出放在文件中,请添加LineInfo=filenamehere。详情请参见perldoc perldebug。(尤其是,如果您将选项更改为frame=2,您还会收到从子例程返回的消息。)

CODE引用用于use语句周围的隐式BEGIN块:

use strict;

真正的意思是

BEGIN {
    require "strict.pm";
    strict->import();
}