0

我正在使用 starman 在 plackup 下运行一个 Web 应用程序,并尝试根据用户请求动态加载和实例化包。我正在使用“需要 $packageName;” 要加载包,其中 $packageName 包含包的名称,名称存储在配置文件中。然后我在实例上执行一组已知的命令,因为所有类都继承自基类并包含一组已知方法。

这在 Apache 下工作正常,但由于某种原因,plackup 说它无法找到包,即使 @INC 包含库路径并且包名称是库路径中最后一个目录的绝对名称。也就是说,包名是 Base::My::Package。

有人遇到过这个问题吗?我是否需要更新 Starman 中的其他路径?我正在使用 -I 标志执行 plackup 并更新我的环境 PERL5LIB 变量。我也在主应用程序类中尝试过'use lib /...',但这些都不起作用。

谢谢

4

1 回答 1

1

require当它们被指定为裸字时,只会接受模块名称(例如 Scalar::Util)。如果您给出require一个字符串,那么它必须是模块的相对路径(例如 Scalar/Util.pm)。您可以通过执行require内部eval(的字符串参数形式eval)来解决这个问题,例如eval "require $package"

请参阅检查机器中安装的模块列表

于 2012-02-11T18:48:55.683 回答