版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/08/25/begin-end-in-mod_perl/以及本声明。
这篇文章,对于能看懂的同学是非常非常重要的资料,对于看不懂的同学就一点用处都没有啦。
调查一下mod_perl下BEGIN/INIT/CHECK/END等块的行为如何?
测试程序,保存为life.cgi:
#!/usr/bin/perl
print "pid = $$/n";
print "Start main running here/n";
BEGIN { print "BEGIN/n"; }
INIT { print "INIT/n"; }
CHECK { print "CHECK/n"; }
END { print "END/n"; }如果直接执行就是这样的:
$ ./life.cgi
BEGIN
CHECK
INIT
pid = 4610
Start main running here
END不论执行多少次,结果都相同(除了每次的pid不同之外)。但如果放到mod_perl下,结果就完全不一样了。先单进程启动(httpd -X),再从浏览器中访问,结果如下:
BEGIN
pid = 4557
Start main running here
END刷新一次,结果是:
pid = 4557
Start main running here
END可见,mod_perl下没有INIT和CHECK过程,只有BEGIN和END。其中END在每次请求时必然执行,但BEGIN只有在进程刚创建后的第一次请求时才执行,以后的请求就不执行了。
如果你用了 Apache::Reload,那么可以修改一下life.cgi试试看,哪怕是一点小小的改动也行。修改之后刷新,可以看到BEGIN又回来了,不过再刷一次就没有了。所以Apache::Reload会在重新加载程序后再执行一遍BEGIN。
根据上述结论再引申一下,use = BEGIN { requre + import },可以推断,在同一进程下两次加载执行了use的页面,那么第二次的use是不起作用的。
分享到:
相关推荐
SecureCRT 7 for Mac Crack 使用 sudo perl ./securecrt_mac_crack.pl /Applications/SecureCRT.app/Contents/MacOS/SecureCRT 手动输入脚本提示的License
Perl[1].TK.FAQ中文版,具体解释了tk的历史及应用!
test purposes only new document 2
PERL perl_add_ons 3 的用法
ActivePerl-5_ActivePerl5.28_ActivePerl_源码.zip
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/...
mod_perl Apache的Perl模块
practical mod_perl, 不用多说了,下就是了
ActivePerl-5_ActivePerl5.28_ActivePerl.zip
编译好的mod_perl.so v2.0.4 for Apache 2.2.11 and Perl 5.10.0,解决ppm安装无法得到正确mod_perl.so文件的问题。
Can’t locate ExtUtils/MakeMaker.pm in @INC (@INC contains: inc /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5
perl语言下,有关时间的包,可以直接copy到lib下
perl语言的一些例子,有助于更好地学习perl语言语法,架构
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Perl Script Ftp Client - Connect the Ftp server and some file operation like create directly and file etc
Effective_Perl_Programming_Writing_Better_Programs_with_Perl.rar Effective_Perl_Programming_Writing_Better_Programs_with_Perl.rar
Perl5.8_patch perl的一个补丁而已 不解释
perl超强代码 集合!(已整理)
Config::Model::OpenSsh 是 ...开发者可以选择使用 Perl API 来修改或者验证 OpenSSH 配置,这些程序是基于 Config:Model 的。 更新日志:http://cpansearch.perl.org/src/DDUMONT/Config-Model-OpenSsh-1.232/Changes
解析verilog代码的perl脚本,解析结果可用于一系列验证自动化