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

前端之家收集整理的这篇文章主要介绍了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 (@_);
  };
}
@H_403_4@基本上,这个脚本的问题是它实际上并没有加载任何东西.当调用CORE :: require(@)时,不会“执行”任何操作.我尝试直接使用$[0]传递脚本名称,但这只会导致脚本死锁,直到它超时.

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

解决方法

关于:
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';
  };
}
@H_403_4@这“工作”,因为调用@INC中的子例程引用并将coderef和filename作为参数传递.见require perldoc:

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

perl -MDevel::TraceLoad=summary my_progam.pl

猜你在找的Perl相关文章