gpt4 book ai didi

perl - 如何动态避免 'use module' 以减少内存占用

转载 作者:行者123 更新时间:2023-12-02 08:25:26 24 4
gpt4 key购买 nike

给定以下模块:

package My::Object;

use strict;
use warnings;

use My::Module::A;
use My::Module::B;
use My::Module::C;
use My::Module::D;

...
1;

我希望能够在接下来的 2 个场景中调用 My::Object:

  1. 正常使用

    使用我的::对象;

    我的::模块->new();

  2. 减少内存使用。调用相同的对象,但使用条件或标志告诉对象跳过使用模块以减少内存使用。有点像:

    使用 My::Object -noUse;

    我的::模块->new();

如果尝试了 Perl if condition没有成功。

我遇到的问题是有很多用途的大对象,然后只加载这个对象会消耗大量 RAM。我知道我可以重构它们,但如果我可以在确定给定场景中没有使用它们时以某种方式避免这些用途,那就太好了。

一个解决方案是在所有需要模块的地方用 require 替换所有 uses,但是当其中一些模块用于很多方法时我觉得不方便。

有什么想法吗?

谢谢

最佳答案

原生编译指示 autouse将在普通子例程 被调用时加载所需的模块:

use autouse 'My::Module::A' => qw(a_sub);
# ... later ...
a_sub "this will dynamically load My::Module::A";

对于正确的 OO 方法,Class::Autouse将在调用方法时加载模块(类):

use Class::Autouse;
Class::Autouse->autouse( 'My::Module::A' );
# ... later ...
print My::Module::A->a_method('this will dynamically load My::Module::A');

关于perl - 如何动态避免 'use module' 以减少内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655049/

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