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

前端之家收集整理的这篇文章主要介绍了perl – 我如何找出正在加载Moose的模块?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想弄清楚我的CGI :: Application中的哪个模块正在加载Moose.我试图超载“require”但我似乎没有正确的语法.如果有人可以清理以下代码,我将不胜感激:
  1. use strict;
  2. use warnings;
  3. use Carp qw//;
  4.  
  5. BEGIN {
  6. *CORE::GLOBAL::require = sub (*) {
  7. warn "Requiring $_[0] at: " . Carp::longmess();
  8. CORE::require (@_);
  9. };
  10. }

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

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

解决方法

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

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

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

  1. perl -MDevel::TraceLoad=summary my_progam.pl

猜你在找的Perl相关文章