2009年12月20日星期日

[PerlChina] CN Perl Advent Day 21: Template::Extract

http://perlchina.org/advent/2009/TemplateExtract.html

=for advent_year 2009

=for advent_day 21

=for advent_title Template::Extract

=for advent_author Fayland Lam

M<Template::Extract> 由☻ 唐鳳 ☺ 所编写,可以使用 TT2 表达式从某个数据里提取东西,而无须使用正则表达式。

一般来说,得到一个 HTML 内容之后,可以使用正则,或者类如 M<HTML::TreeBuilder>
之类的模块来提取数据。本文介绍的模块能同样使 job 完成,并且更加优雅。

以我们当前的 A<http://perlchina.org/advent/> 举例,得到所有的 link 和对应的编号。

=begin codeNNN

use strict;
use warnings;
use LWP::Simple 'get';
use Template::Extract;
use Data::Dumper::Perltidy; # or just Data::Dumper

my $html = get('http://perlchina.org/advent/');
my $rule = <<RULE;
[% FOREACH link IN links %]
<br><div class="[% ... %]"><a href="[% link.url %]" style="[% ...
%]">[% link.num %]</a></div>
[% END %]
RULE

my $extract = Template::Extract->new();
my $data = $extract->extract($rule, $html);
print Dumper(\$data);

=end codeNNN

运行一下:

=begin pre

$VAR1 = \{
'links' => [
{
'link' => {
'num' => '1',
'url' => '2009/local_lib.html'
}
},
{
'link' => {
'num' => '2',
'url' => '2009/PerlDevENV.html'
}
},
{
'link' => {
'num' => '3',
'url' => '2009/EndScope.html'
}
},
{
'link' => {
'num' => '4',
'url' => '2009/autodie.html'
}
},
{
'link' => {
'num' => '5',
'url' => '2009/SSHBatch.html'
}
},
...

=end pre

代码简单可靠。:) Enjoy

谢谢。

--
Fayland Lam // http://www.fayland.org/

--

您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: