[PerlChina] 求助如何动态加载模块, dynamic load Module
Qiang ( James ) Li
shijialee at gmail.com
Fri Dec 7 19:39:58 PST 2007
不好意思,这几天比较忙.... 下面是我得回复 :
rorot wrote:
> 在07-12-3,*Qiang ( James ) Li* 写道:
>
>
> 另外,我碰巧要用从网页的 DOM 里提取数据,试了一下 Web::Scraper 发现很好
> 用。
> http://search.cpan.org/~miyagawa/Web-Scraper-0.24/lib/Web/Scraper.pm
> 文档里的例子就能说明它的用途。
>
>
> 一下子没看明白Web::Scraper的优势。这个。。。。。。。
我也是刚开始. Web::Scraper 的优势是你可以根据 CSS (class/span 名称) 和
html tag 来获得你想要的内容.
作者 use.perl 上有个例子:
use Web::Scraper;
use URI;
my $uri =
URI->new("http://wikisubtitles.net/ajax_loadShow.php?show=65&season=3");
my $scraper = scraper {
process '//td[@class="idioma"][text()=~"English \(US\)"]/..//a',
'links[]' => '@href';
};
my $result = $scraper->scrape($uri);
解释一下就是寻找使用 class 名称为 idioma 的 td, 内容匹配 English (US),
然后把 td 里面的链接抓来. 这个模块是基于 ruby scraper 工具,目前 perl 版
的文档很少,基本上要看 ruby 的文档才可以.
>
> 程序是运行在 mod_perl 下的么?如果是的话那就没有必要动态加载。即使在
> plain cgi 下,多加载一个或两个模块对运行速度到底有多大区别?
>
> 常说的一句话:在你没有找到瓶颈的时候,不要做无谓的提速。
>
> 动态加载你可以使用 require :
>
> if ( $output_type = 'xml' ) {
> eval { require XML::OUTPUT };
> die if $@;
> print $xml_output;
> }
>
>
> 这话说的对,用eval{ require...}处理动态加载,不失为一种方法。不过我现把
> 该用到的块先包进来再说。其余在以后调优。另外,我有个关于mod_perl的问题。
> 就是自己的代码包了很多自己写的模块,然后在mod_perl下跑,但是由于在开发阶
> 段,所以经常性的修改被脚本包含的模块,但是却不见mod_perl立即更新。而且其
> 启动时加载的原来的老模块的内容。搞的我每次修改了模块,都要重启一次
> Apache, 这个问题如何解决呢?
>
>
mod_perl 文档里有详细的讲,这是 1.x 的文档:
http://perl.apache.org/docs/1.0/guide/porting.html#Reloading_Modules_and_Required_Files
开发时可以使用 Apache::Reload. 但在 production 里就不适合了.
Qiang
More information about the China-pm
mailing list