Board logo

标题: [原创教程] [连载]《Intermediate Perl》学习笔记 [打印本页]

作者: PerlMonk    时间: 2017-4-18 12:10     标题: [连载]《Intermediate Perl》学习笔记

本帖最后由 PerlMonk 于 2017-4-18 14:37 编辑

大骆驼书已经过了两遍,书柜上的一本《Perl 进阶》纯属情怀,中文版,这几天翻阅发现其中的翻译惨不忍睹,语无伦次。
改看英文版,顺便做一些摘要总结,这样回顾的时候方便一些。

一楼占坑

暂时使用这段 Perl 将 markdown的部分风格转 BBCode
  1. use utf8;
  2. use Encode;
  3. use IO::Handle;
  4. STDOUT->autoflush(1);
  5. my $file = encode('gbk', "Perl进阶-基础.md");
  6. open my $fh, "<:utf8", $file or die "$!";
  7. my %lang_fmt = (
  8.     'perl' => 'pl',
  9.     'python' => 'py',
  10.     'c' => 'c',
  11.     'cpp' => 'cpp',
  12.     'ruby' => 'rb',
  13. );
  14. my @topics;
  15. my $lang;
  16. my $indent = 0;
  17. while ( my $line = <$fh> )
  18. {
  19.     #代码块
  20.     if ($line=~/\`{3}(\w+)$/)
  21.     {
  22.         $lang = lc($1);
  23.         $line=~s/\`{3}(\w+)/\[code\]/;
  24.         $line=~s/perl/bash/;
  25.     }
  26.     elsif ($line=~/\`{3}$/)   #inline code
  27.     {
  28.         $line=~s/\`{3}\r?\n$/\[\/code\]/;
  29.     }
  30.     elsif ($line=~/^\s*#[^#]/)    #一级标题
  31.     {
  32.         $line=~s/^\s*#(.*)$/\[b\]\[size=5\]$1\[\/size\]\[\/b\]\n\[list\]\[list\]/;
  33.         $line = "[/list]"x2 . "\n".$line if ($indent == 1);
  34.         $line = "[/list]"x4 ."\n".$line if ($indent == 2);
  35.         $indent = 1;
  36.     }
  37.     elsif ($line=~/^\s*##[^#]/)    #二级标题
  38.     {
  39.         $line=~/^\s*##(.*)$/;
  40.         $line=~s/^\s*##(.*)$/\[b\]$1\[\/b\]\n\[list\]\[list\]/;
  41.         $line = "[/list]"x2 ."\n".$line if ($indent >= 2);
  42.         $indent = 2;
  43.     }
  44.     elsif ($line=~/\*{2}[^*]/)    #粗体 (原文书写同一段文字最好不要断行)
  45.     {
  46.         $line=~s/\*{2}(.*)\*{2}/\[b\]$1\[\/b\]/;
  47.     }
  48.     elsif ($line=~/\*[^*]/)    #倾体 (原文书写同一段文字最好不要断行)
  49.     {
  50.         $line=~s/\*(.*)\*/\[i\]$1\[\/i\]/;
  51.     }
  52.     $line=~s/\s*`(.*)`\s*$/\[code\]$1\[\/code\]\n/;
  53.     push @topics, $line;
  54. }
  55. my $all = join("", @topics);
  56. $all =~s/(\r?\n)+$//;
  57. if ( $all=~/\[list\]/ )
  58. {
  59.     $all .= '[/list]';
  60. }
  61. print encode('gbk', $all);
  62. print "\n";
  63. close $fh;
复制代码

作者: PerlMonk    时间: 2017-4-18 12:11     标题: [连载]《Intermediate Perl》学习笔记 - 进阶

本帖最后由 PerlMonk 于 2017-4-18 12:43 编辑

列表操作

eval

do