Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何使用B::简明为所有函数转储ops_Perl - Fatal编程技术网

Perl 如何使用B::简明为所有函数转储ops

Perl 如何使用B::简明为所有函数转储ops,perl,Perl,现在我可以按如下方式命名子例程printargs以获取转储 perl -MO=Concise,printargs,-main,-terse Hello.pl 假设我有多个子例程,如何构建一个通用模块来转储所有子例程的详细信息?要转储一个您可以使用的子例程 B::Concise::compile($sub)->() 其中$sub是对sub的引用 如果你事先知道潜艇的名单, 你完成了,只需为每一个做上面的事情 否则,获取现有子例程名称的列表 在特定的包中,始终可以遍历符号 该包的表: no

现在我可以按如下方式命名子例程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)->();
    }
}

你能为你给出的脚本提供一个完整的工作示例吗?对不起,我是新手。[假设我有一个文件hello.pl,我应该怎么做]?用大写字母“C”拼写“简明”也很重要(我现在明白了——谢谢)