Perl 带Starman的plackup下的动态包装加载
我正在plackup和starman下运行一个web应用程序,并尝试根据用户请求动态加载和实例化包。我正在使用“require$packageName;”要加载$packageName包含包名称的包,名称存储在配置文件中。然后我在实例上执行一组已知的命令,因为所有类都从基类继承并包含一组已知的方法 这在Apache下可以正常工作,但出于某种原因,plackup说它无法定位包,即使@INC包含库路径,并且包名是lib路径中最后一个目录的绝对名称。也就是说,包名应该是Base::My::package 有人经历过这个问题吗?我需要更新Starman中的其他路径吗?我正在使用-I标志执行plackup,并更新我的环境PERL5LIB变量。我还在主应用程序类中尝试了Perl 带Starman的plackup下的动态包装加载,perl,psgi,starman,Perl,Psgi,Starman,我正在plackup和starman下运行一个web应用程序,并尝试根据用户请求动态加载和实例化包。我正在使用“require$packageName;”要加载$packageName包含包名称的包,名称存储在配置文件中。然后我在实例上执行一组已知的命令,因为所有类都从基类继承并包含一组已知的方法 这在Apache下可以正常工作,但出于某种原因,plackup说它无法定位包,即使@INC包含库路径,并且包名是lib路径中最后一个目录的绝对名称。也就是说,包名应该是Base::My::packag
“使用lib/…”
,但这些都不起作用
谢谢
require
仅接受模块名(例如Scalar::Util),当它们被指定为裸字时。如果给require
一个字符串,那么它需要是模块的相对路径(例如Scalar/Util.pm)。您可以通过在eval
中执行require
(eval
的字符串参数形式)来解决此问题,例如eval“require$package”
参见示例:
starman-e'my$package=“Template”;需要$package;my$t=$package->new;返回[200,[“内容类型”=>“文本/普通”],[“确定”];'代码>这或多或少是一个不起作用的例子。eval“使用$package”;是吗trick@MadHacker我的回答对你有帮助吗?