gpt4 book ai didi

perl - 如何确定正在加载 Moose 的模块是什么?

转载 作者:行者123 更新时间:2023-12-04 04:54:16 26 4
gpt4 key购买 nike

我试图找出我的 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 和文件名作为参数传递。见 require perldoc:

正如 phaylon 所述, 你也可以使用 Devel::TraceLoad获取应用程序运行时加载的所有模块的摘要(以及加载它们的文件的哪一行)
perl -MDevel::TraceLoad=summary my_progam.pl

关于perl - 如何确定正在加载 Moose 的模块是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3815412/

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