perl – 我如何找出正在加载Moose的模块?

我想弄清楚我的CGI :: Application中的哪个模块正在加载Moose.我试图超载“require”但我似乎没有正确的语法.如果有人可以清理以下代码,我将不胜感激:
use strict;
use warnings;
use Carp qw//;

BEGIN {
  *CORE::GLOBAL::require = sub (*) { 
    warn "Requiring $_[0] at: " . Carp::longmess();
    CORE::require (@_);
  };
}

基本上,这个脚本的问题是它实际上并没有加载任何东西.当调用CORE :: require(@)时,不会“执行”任何操作.我尝试直接使用$[0]传递脚本名称,但这只会导致脚本死锁,直到它超时.

注意:上面的脚本位于我的启动脚本的开头

解决方法

关于:
BEGIN {
  unshift @INC,sub {
    printf "Moose first called by pkg %s at line %d in %s\n",(caller)[0,2,1]
      if $_[1] eq 'Moose.pm';
  };
}

这“工作”,因为调用@INC中的子例程引用并将coderef和filename作为参数传递.见require perldoc:

phaylon所述,您还可以使用Devel::TraceLoad获取应用程序运行时加载的所有模块的摘要(以及加载它们的文件的哪一行)

perl -MDevel::TraceLoad=summary my_progam.pl

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...