gpt4 book ai didi

perl - 如何在不使用 eval 的情况下动态包含 Perl 模块?

转载 作者:行者123 更新时间:2023-12-03 10:07:25 25 4
gpt4 key购买 nike

我需要动态包含一个 Perl 模块,但如果可能的话,由于工作编码标准,我希望远离 eval。这有效:

$module = "My::module";
eval("use $module;");

但我需要一种没有 eval 的方法如果可能的话。所有谷歌搜索都指向 eval方法,但没有任何其他方式。

没有 eval 可以吗? ?

最佳答案

使用 require 在运行时加载模块。将其包装在一个 block (不是字符串)中通常是个好主意eval以防模块无法加载。

eval {
require My::Module;
My::Module->import();
1;
} or do {
my $error = $@;
# Module load failed. You could recover, try loading
# an alternate module, die with $error...
# whatever's appropriate
};
eval {...} or do {...} 的原因语法和复制 $@是因为 $@是一个全局变量,可以由许多不同的东西设置。您希望尽可能以原子方式获取该值,以避免出现其他东西将其设置为不同值的竞争条件。

如果您直到运行时才知道模块的名称,则必须手动在模块名称 (My::Module) 和文件名 (My/Module.pm) 之间进行转换:
my $module = 'My::Module';

eval {
(my $file = $module) =~ s|::|/|g;
require $file . '.pm';
$module->import();
1;
} or do {
my $error = $@;
# ...
};

关于perl - 如何在不使用 eval 的情况下动态包含 Perl 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917261/

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