我可以在Perl中使用应用程序范围变量吗?

1 variables perl cgi scope

我对Perl/CGI有点新,我来自Java/JSP背景.

我正在编写一个小型原型,需要将一些"重"数据(~200MB)加载到数据结构中.

现在,我显然希望避免在每次请求时加载数据.到目前为止,我设法使用一个"静态"变量(一个封装在{}块中),但这似乎适用于一些请求.在一些不活动时间之后,下一个请求将不得不再次加载数据.

从我的JSP经验来看,这似乎是一种会话变量,在会话到期之前仍然可用.

如何设置"全局"或"应用程序"变量?不确定这些术语是否适用于CGI ...是否可以让应用程序的所有会话共享一个变量?

顺便说一句,我现在只是使用"使用CGI qw(:标准)".

dao*_*oad 6

执行CGI脚本,然后在每个请求后终止.每次都会加载200 MB变量.

您应该将此数据放入数据库或其他结构化格式,以便您只在需要时加载数据.

查看类似MLDBM,DBD :: SQLiteDBM :: Deep的内容

有关Perl中变量作用域的信息,请参阅应用作用域.

Ovid的CGI课程也是学习在Perl中编写CGI脚本的好资源.


Dan*_*tin 5

CGI程序针对每个请求在单独的进程中运行.这是CGI协议的一部分.

所以只要你受到CGI的约束,这是不可能的.你确定你被CGI绑定了吗?

如果您正在运行Apache,并且Apache已将mod_perl编译或作为动态加载的模块提供,则可以在进程中运行perl脚本并重新使用数据; 甚至还有一种兼容模式,你可以正常编写你的CGI脚本(使用"使用CGI"),它们会自动进行模式化,这样BEGIN块内的东西只能运行一次.