我正在使用starman在plackup下运行一个Web应用程序,并尝试根据用户请求动态加载和实例化包。我正在使用'要求$ packageName;'要加载包,其中$ packageName包含包的名称,名称存储在配置文件中。然后,我在实例上执行一组已知的命令,因为所有类都继承自基类并包含一组已知方法。
这在Apache下工作正常,但由于某种原因,即使@INC包含库路径并且包名称是lib路径中最后一个目录的绝对包,plackup也说它找不到包。也就是说,包名称将是Base :: My :: Package。
有人遇到过这个问题吗?我是否需要更新Starman中的其他路径?我正在使用-I标志执行plackup以及更新我的环境PERL5LIB变量。我还在主应用类中尝试了'use lib /...'
,但这些都不起作用。
由于
答案 0 :(得分:1)
require
只会在指定为裸字时接受模块名称(例如Scalar :: Util)。如果给require
一个字符串,那么它需要是模块的相对路径(例如Scalar / Util.pm)。您可以通过在require
(eval
的字符串参数形式)中执行eval
来解决此问题,例如eval "require $package"
。