免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5300 | 回复: 13
打印 上一主题 下一主题

关于 <<Perl 语言编程>> CHM 及PDF 版的错误,该更新了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-14 22:26 |只看该作者 |倒序浏览
尽管 <<Perl 语言编程>> 有些非议,当时仍然是一本值得读和参考的书,目前chm, PDF 版 中包含大量的错误,在学习的时候容易糊涂。

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

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

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

package   Bestiary;
&nbsp;&nbsp;&nbsp;require      Exporter;

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

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

&nbsp;&nbsp;&nbsp;our $VERSION   = 1.00;         # 版本号


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


&nbsp;&nbsp;&nbsp;sub   camel { print "One-hump dromedary" }

&nbsp;&nbsp;&nbsp;$weight = 1024;

&nbsp;&nbsp;&nbsp;1;

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-07-14 23:04 |只看该作者
自己更新!
我当时放出的是一个脚本,
再次运行就可以得到新的 chm 元文件,
编译一下就可以生成 chm 文件。

论坛徽章:
0
3 [报告]
发表于 2008-07-15 09:48 |只看该作者
我是无所谓了,只是看到网上这些错误的版本让不少人走了弯路。

论坛徽章:
0
4 [报告]
发表于 2008-07-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=([^"]+?)"}{a href="$1.html" title="$2"}sg; 为啥不行?

论坛徽章:
0
5 [报告]
发表于 2008-07-15 22:53 |只看该作者
先把正则简单一点,匹配成功后,然后再增加一些规则,这样你就知道错误在哪里了。

论坛徽章:
0
6 [报告]
发表于 2008-07-16 08:09 |只看该作者
原帖由 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 好像是可以的啊?

[ 本帖最后由 cobrawgl 于 2008-7-16 08:17 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-07-16 11:19 |只看该作者
http://svn.perlchina.org/trunk/member/flw/plx/getall.pl

是这个脚本么,好像不能下载

论坛徽章:
0
8 [报告]
发表于 2008-07-16 12:53 |只看该作者
中文版错误比较多,应该发个勘误的帖子,大家把发现的错误汇聚一下

论坛徽章:
0
9 [报告]
发表于 2008-07-16 16:45 |只看该作者
原帖由 cobrawgl 于 2008-7-16 08:09 发表

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

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

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

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use LWP::Simple;
  4. use Encode;

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

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

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

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

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

  25. [FILES]
  26. };

  27. my $hhp_end = q{
  28. layout.css
  29. style.css
  30. i_arrow_down.gif

  31. [INFOTYPES]
  32. };

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

  47. print HHP $hhp_end;

  48. my $hhc_begin = q{
  49. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
  50. <HTML>
  51. <HEAD>
  52. <!-- Sitemap 1.0 -->
  53. </HEAD><BODY>
  54. <OBJECT type="text/site properties">
  55.         <param name="ExWindow Styles" value="0x200">
  56.         <param name="Window Styles" value="0x800025">
  57.         <param name="Font" value="MS Sans Serif,9,0">
  58. </OBJECT>
  59. <UL>
  60.         <LI> <OBJECT type="text/sitemap">
  61.                 <param name="Name" value="Perl 语言编程">
  62.                 <param name="Local" value="index.html">
  63.                 <param name="ImageNumber" value="11">
  64.                 </OBJECT>
  65.         <UL>
  66. };

  67. my $hhc_end = q{
  68.         </UL>
  69. </UL>
  70. </BODY></HTML>
  71. };

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

  73. print FH $hhc_begin;

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

  83. print FH $hhc_end;

  84. close FH;

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

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

论坛徽章:
0
10 [报告]
发表于 2008-07-16 17:21 |只看该作者
ls 的,你这个 script 干吗的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP