gpt4 book ai didi

perl - 如何使用 B::Concise 为所有函数转储操作

转载 作者:行者123 更新时间:2023-12-04 20:23:40 25 4
gpt4 key购买 nike

现在我可以将子例程 printargs 命名如下来获取转储。

perl -MO=Concise,printargs,-main,-terse Hello.pl

假设我有几个子例程,我如何构建一个通用模块来转储所有子例程的详细信息?

最佳答案

要转储单个子例程,您可以使用

B::Concise::compile($sub)->()

其中 $sub 是对 sub 的引用。

如果你事先知道潜艇名单,
你已经完成了,只需为每个人执行上述操作。

否则,获取现有子程序名称的列表
在特定的包装中,您始终可以行走符号
该软件包的表格:
no strict 'refs';
for my $k (keys %{"$pkgname\::"}) {
if (*{${"$pkgname\::"}{$k}}{CODE}) {
print "$k\n"; # sub name
}
}

更新:我的第一行包含一个错误,已修复
现在。这是完整的示例脚本:
package Blah;

sub x { return "x"; }
sub hehe { print 2*2, "\n"; }
sub meme { die "ouch" }

our $varvar; # to illustrate the {CODE} thingy

package main;
use warnings;
use strict;
use B::Concise;

my $pkgname = "Blah";
no strict 'refs';
for my $k (keys %{"$pkgname\::"}) {
if (*{${"$pkgname\::"}{$k}}{CODE}) {
my $sub = \&{${"$pkgname\::"}{$k}};
print "Dump of $pkgname\::$k():\n";
B::Concise::compile($sub)->();
}
}

关于perl - 如何使用 B::Concise 为所有函数转储操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497595/

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