gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:54:52 25 4
gpt4 key购买 nike

例如。我有以下 Perl 脚本

{ 
package A;

{
package B;

sub _y {
print "Just Another Perl Hacker\n";

}

}

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


use strict;
use warnings;

_x();

如何使用包限定符将每个执行的子程序打印到 STDERR 或任何日志文件?

例如。从上面的脚本中,我希望看到以下输出:
1 A::_x()
2 B::_y()

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

有任何想法吗?

最佳答案

考虑调试模块会让你走上正确的轨道。当启用 Debug模式时,Perl 调用函数 DB::DB()在程序的每个执行步骤中。从这里您可以从 caller 中提取子例程名称。内置(将包括包名称),并按照您认为合适的方式输出。

从名为 Devel/AllSubs.pm 的文件开始在您的@INC 中的某处小路:

package Devel::AllSubs;
my $count = 0;
my $last_sub = '::';
sub DB::DB {
my ($pkg, $file, $line,$sub) = caller(1);
if ($sub ne $last_sub) {
print STDERR ++$count," $sub\n";
$last_sub = $sub;
}
}
1;

然后运行你的程序
$ perl -d:AllSubs script.pl

样本输出:
1 A::_x
Hello world!
2 B::_y
Just Another Perl Hacker

关于perl - 如何打印所有执行的子例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53798816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com