gpt4 book ai didi

perl - 如何使用仅在运行时已知的 Perl 包?

转载 作者:行者123 更新时间:2023-12-03 14:36:29 26 4
gpt4 key购买 nike

我有一个 Perl 程序,它需要使用包(我也写)。其中一些包仅在运行时选择(基于某些环境变量)。当然,我不想在我的代码中为所有这些包添加一个“使用”行,但只有一个“使用”行,基于这个变量,比如:

use $ENV{a};

不幸的是,这当然行不通。关于如何做到这一点的任何想法?

提前致谢,
奥伦

最佳答案

eval "require $ENV{a}";

use ”在这里不能很好地工作,因为它只在 eval 的上下文中导入。 .

正如@Manni 所说,实际上,最好使用require。引自 man perlfunc :

如果 EXPR 是一个裸字,则 require 假定为“.pm”扩展名,并且
将文件名中的“::”替换为“/”,以便于
加载标准模块。这种形式的模块加载不
冒着改变你的命名空间的风险。

换句话说,如果你试试这个:

需要 Foo::Bar; # 一个精彩的裸词

require 函数实际上会寻找“Foo/Bar.pm”文件
在@INC 数组中指定的目录中。

但如果你试试这个:

$class = 'Foo::Bar';
需要$类; # $class 不是裸词
#或者
需要“Foo::Bar”; # 因为“”而不是一个裸词

require 函数将在@INC 中查找“Foo::Bar”文件
数组,并会提示在那里找不到“Foo::Bar”。在这个
你可以这样做:

eval "需要 $class";

关于perl - 如何使用仅在运行时已知的 Perl 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442710/

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