关于 <<Perl 语言编程>> CHM 及PDF 版的错误,该更新了

关于 <<Perl 语言编程>> CHM 及PDF 版的错误,该更新了

尽管 <<Perl 语言编程>> 有些非议,当时仍然是一本值得读和参考的书,目前chm, PDF 版 中包含大量的错误,在学习的时候容易糊涂。

http://www.pgsqldb.org/mwiki/index.php/ProgrammingPerl

上面的最新版本地址修正 目前 chm 及 pdf 版中的大部分错误.

举个例子:
第十一章 模块
创建模块那部分的代码,目前只有上面wiki里面是正确的,chm 版 及PDF 版中的都是错误的。

package   Bestiary;
   require      Exporter;

   our @ISA   =qw(Exporter);
   our @EXPORT    =qw(camel);      # 缺省输出的符号

   our @EXPORT_OK   =qw($weight);      # 按要求输出的符号

   our $VERSION   = 1.00;         # 版本号


   ### 在这里包含你的变量和函数


   sub   camel { print "One-hump dromedary" }

   $weight = 1024;

   1;
自己更新!
我当时放出的是一个脚本,
再次运行就可以得到新的 chm 元文件,
编译一下就可以生成 chm 文件。
我是无所谓了,只是看到网上这些错误的版本让不少人走了弯路。
麻烦说一下 $index =~ s{a class="twikiLink" href="/bin/view/Perl/([^"]+?)"}{a class="twikiLink" href="$1.html"}sg; 要怎样修改?
我写 $index =~ s{a href="/mwiki/index.php/([^"]+?)" title=([^"]+?)"}{a href="$1.html" title="$2"}sg; 为啥不行?
先把正则简单一点,匹配成功后,然后再增加一些规则,这样你就知道错误在哪里了。


QUOTE:
原帖由 galaxy001 于 2008-7-15 21:30 发表
麻烦说一下 $index =~ s{a class="twikiLink" href="/bin/view/Perl/([^"]+?)"}{a class="twikiLink" href="$1.html"}sg; 要怎样修改?
我写 $index =~ s{a href="/mwiki/index.php/([^"]+?)" title=([^"]+?)" ...

我看看了看,你的 regex 好像是可以的啊?

http://svn.perlchina.org/trunk/member/flw/plx/getall.pl

是这个脚本么,好像不能下载
中文版错误比较多,应该发个勘误的帖子,大家把发现的错误汇聚一下


QUOTE:
原帖由 cobrawgl 于 2008-7-16 08:09 发表

我看看了看,你的 regex 好像是可以的啊?

title=后漏了个引号。
修改后可以下载全部网页,但原来清理html的那堆,网页格式变了,我又没耐心写,所以就那么搁着了……

哪位熟悉RegEx的人来改写一下?
以下是我初步修改后的版本
——————————————————————————————

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use Encode;

getstore( 'http://www.pgsqldb.org/twiki/pub/TWiki/PatternSkin/layout.css', 'layout.css' );
getstore( 'http://www.pgsqldb.org/twiki/pub/TWiki/PatternSkin/style.css', 'style.css' );
getstore( 'http://www.pgsqldb.org/twiki/pub/TWiki/PatternSkin/i_arrow_down.gif', 'i_arrow_down.gif' );

my $urlBase = 'http://www.pgsqldb.org/mwiki/index.php';

my $index = get( "$urlBase/ProgrammingPerl" ) || die "get index.html failed!\n";

#&trim( $index );
# $index =~ s{a class="twikiLink" href="/bin/view/Perl/([^"]+?)"}{a class="twikiLink" href="$1.html"}sg;
# a href="/bin/view/Perl/PerlThread" class="twikiLink"
# $index =~ s{a class="twikiLink" href="/bin/view/Perl/([^"]+?)"}{a class="twikiLink" href="$1.html"}sg;
# </li><li> <a href="/mwiki/index.php/PerlUnaryandBinaryOperators" title="PerlUnaryandBinaryOperators">第三章 单目和双目操作符</a>
$index =~ s{a href="/mwiki/index.php/([^"]+?)" title="([^"]+?)"}{a href="$1.html" title="$2"}sg;
&save( $index, "index.html" );

my $hhp_begin = q{
[OPTIONS]
Compatibility=1.1 or later
Compiled file=Perl 语言编程.chm
Contents file=Perl 语言编程.hhc
Default topic=index.html
Display compile progress=No
Language=0x804 中文(中国)

[FILES]
};

my $hhp_end = q{
layout.css
style.css
i_arrow_down.gif

[INFOTYPES]
};

open HHP, ">Perl 语言编程.hhp" or die "Create file failed!\n";
print HHP $hhp_begin;
#<ul><li> <a href="PerlPerlBitsandPieces.html" title="PerlPerlBitsandPieces">第二章 集腋成裘</a>
#</li><li> <a href="PerlUnaryandBinaryOperators.html" title="PerlUnaryandBinaryOperators">第三章 单目和双目操作符</a>
while( $index =~ /<li>..?<a href="(.+?)\.html" title="([^"]+?)"/mg ) {
    my $url = $1;
    print "$url\n";
    next if grep { $_ eq $url } qw( WebHome WebChanges WebIndex WebSearch );
    my $content = get( "$urlBase/$url" );
    next unless $content;
    &trim( $content );
    &save( $content, "$url.html" );
    print HHP "$url.html\n";
}

print HHP $hhp_end;

my $hhc_begin = q{
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<!-- Sitemap 1.0 -->
</HEAD><BODY>
<OBJECT type="text/site properties">
        <param name="ExWindow Styles" value="0x200">
        <param name="Window Styles" value="0x800025">
        <param name="Font" value="MS Sans Serif,9,0">
</OBJECT>
<UL>
        <LI> <OBJECT type="text/sitemap">
                <param name="Name" value="Perl 语言编程">
                <param name="Local" value="index.html">
                <param name="ImageNumber" value="11">
                </OBJECT>
        <UL>
};

my $hhc_end = q{
        </UL>
</UL>
</BODY></HTML>
};

open FH, ">Perl 语言编程.hhc" or die "create file failed!\n";

print FH $hhc_begin;

Encode::from_to( $index, 'utf-8', 'gb2312' );
while( $index =~ m{<a href="([^"]+)" title=([^"]+?)">(第[^<]*?)</a>}sg ){
    print FH qq{<LI> <OBJECT type="text/sitemap">
                        <param name="Name" value="$2">
                        <param name="Local" value="$1">
                        <param name="ImageNumber" value="11">
                        </OBJECT>
            };
}

print FH $hhc_end;

close FH;

sub save {
    my ($str, $fileName) = @_;
    open FH, ">$fileName" or die "gen $fileName failed!\n";
    print FH $str;
    close FH;
}

sub trim {
    $_[0] =~ s/\n<u style="display: none">.*<\/u>\n//s;
    $_[0] =~ s/<div class="([^"]+)".*?<\/div>/($1 eq 'twikiTopic' or $1 eq 'twikiToc' or $1 eq 'fragment' or $1 eq 'portlet') ? $& : ''/esg;
    $_[0] =~ s{[url]http://www.pgsqldb.org/pub/TWiki/PatternSkin/[/url]}{./}sg;
    $_[0] =~ s{<base href="http://www.pgsqldb.org/bin/view/Perl/.*?"[^>]*>}{}sg;
    $_[0] =~ s{\n<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">\n</script>}{}sg;
    $_[0] =~ s{\n<script type="text/javascript">\n_uacct = "UA-179457-1";\nurchinTracker\(\);\n</script>}{}sg;
    $_[0] =~ s{\n<div class="twikiTopic">\n}{\n<div class="twikiTopic" style="padding:0 1.5em"><br>\n}sg;
}

ls 的,你这个 script 干吗的?