Template::Extract 由☻ 唐鳳 ☺ 所编写,可以使用 TT2 表达式从某个数据里提取东西,而无须使用正则表达式。
一般来说,得到一个 HTML 内容之后,可以使用正则,或者类如 HTML::TreeBuilder 之类的模块来提取数据。本文介绍的模块能同样使 job 完成,并且更加优雅。
以我们当前的 http://perlchina.org/advent/ 举例,得到所有的 link 和对应的编号。
1 use strict; 2 use warnings; 3 use LWP::Simple 'get'; 4 use Template::Extract; 5 use Data::Dumper::Perltidy; # or just Data::Dumper 6 7 my $html = get('http://perlchina.org/advent/'); 8 my $rule = <<RULE; 9 [% FOREACH link IN links %] 10 <br><div class="[% ... %]"><a href="[% link.url %]" style="[% ... %]">[% link.num %]</a></div> 11 [% END %] 12 RULE 13 14 my $extract = Template::Extract->new(); 15 my $data = $extract->extract($rule, $html); 16 print Dumper(\$data);
运行一下:
$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'
}
},
...
代码简单可靠。:) Enjoy
谢谢。