求婚示爱的Perl代码之注释篇

 更新时间:2013年03月01日 11:30:38   作者:  
Deparse 模块是一个很好的打印机,它可以揭开 Perl 代码神秘的面纱,帮助你理解优化器为你的代码做了那些转换。换言之,它会重新生成Perl代码,试着略去一些晦涩难懂的部分,把代码用一致的格式写出来
原始代码
代码出处:http://www.perlmonks.org/index.pl?node_id=384100
 #!/usr/bin/perl -w
    use strict;

         my$f=           $[;my
       $ch=0;sub       l{length}
     sub r{join"",   reverse split
    ("",$_[$[])}sub ss{substr($_[0]
    ,$_[1],$_[2])}sub be{$_=$_[0];p
     (ss($_,$f,1));$f+=l()/2;$f%=l
      ();$f++if$ch%2;$ch++}my$q=r
       ("\ntfgpfdfal,thg?bngbj".   
        "naxfcixz");$_=$q; $q=~
          tr/f[a-z]/ [l-za-k]
            /;my@ever=1..&l
              ;my$mine=$q
                ;sub p{
                 print
                  @_;
                   }

           be $mine for @ever

代码重构

B::Deparse 模块是一个很好的打印机,它可以揭开 Perl 代码神秘的面纱,帮助你理解优化器为你的代码做了那些转换。换言之,它会重新生成Perl代码,试着略去一些晦涩难懂的部分,把代码用一致的格式写出来。

使用 B::Deparse 模块的一种方法:

复制代码 代码如下:
    perl -MO=Deparse heart_raw.pl > heart_deparse.pl

输出如下代码:

复制代码 代码如下:

 BEGIN { $^W = 1; }
    use strict 'refs';
    my $f = $[;
    my $ch = 0;
    sub l {
        length $_;
    }
    sub r {
        join '', reverse(split(//, $_[0], 0));
    }
    sub ss {
        substr $_[0], $_[1], $_[2];
    }
    sub be {
        $_ = $_[0];
        p(ss($_, $f, 1));
        $f += l() / 2;
        $f %= l();
        ++$f if $ch % 2;
        $ch++;
    }
    my $q = r("\ntfgpfdfal,thg?bngbjnaxfcixz");
    $_ = $q;
    $q =~ tr/[]a-z/[]l-p r-za-k/;
    my(@ever) = 1 .. &l;
    my $mine = $q;
    sub p {
        print @_;
    }
    be $mine foreach (@ever);

代码注释

复制代码 代码如下:

 #打开警告开关
    BEGIN { $^W = 1; }

    #符号引用检查
    use strict 'refs';

    #数组中第一个元素的索引号
    my $f  = $[;
    my $ch = 0;

    #注意字符串中有个换行符
    my $q = r("\ntfgpfdfal,thg?bngbjnaxfcixz");
    $_ = $q;
    $q =~ tr/[]a-z/[]l-p r-za-k/;

    my (@ever) = 1 .. &l;
    my $mine = $q;

    be($mine) foreach (@ever);

    #获取字符串的长度
    sub l {
        length $_;
    }

    #反转字符串
    #join, 0均为凑数用,可以省略
    sub r {
        join '', reverse( split( //, $_[0], 0 ) );
    }

    #提取字符串中的子串
    sub ss {
        substr $_[0], $_[1], $_[2];
    }

    #输出
    sub p {
        print @_;
    }

    #从字符串的前半段和后半段交替提取一个字符并输出
    sub be {
        $_ = $_[0];
        p( ss( $_, $f, 1 ) );
        $f += l() / 2;
        $f %= l();
        ++$f if $ch % 2;
        $ch++;
    }

代码重写
复制代码 代码如下:

 #!/usr/bin/env perl

    use strict;
    use warnings;
    use utf8;

    my $pointer   = 0;
    my $character = 0;
    my $string    = reverse("\ntfgpfdfal,thg?bngbjnaxfcixz");
    $string =~ tr/a-z/l-p r-za-k/;
    foreach ( 1 .. length($string) ) {
        print substr( $string, $pointer, 1 );
        $pointer += length($string) / 2;
        $pointer %= length($string);
        ++$pointer if $character % 2;
        $character++;
    }

代码输出

复制代码 代码如下:
kristen, will you marry me?

相关文章

  • Perl实现高水线算法(解决多值比较问题方法)

    Perl实现高水线算法(解决多值比较问题方法)

    这篇文章主要介绍了Perl实现高水线算法(解决多值比较问题方法),从本文代码示例中还可以学习到数组遍历、函数写法、函数调用等知识,需要的朋友可以参考下
    2015-06-06
  • Perl语言入门学习指南及实用示例

    Perl语言入门学习指南及实用示例

    Perl广泛应用于系统管理、Web开发、网络编程和数据处理等领域,本文将带您入门Perl语言,介绍其基本语法、常用功能及实用示例,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • perl 删除数组元素的几种方法小结

    perl 删除数组元素的几种方法小结

    perl 删除数组元素的几种方法,有需要的朋友可以参考下
    2013-02-02
  • 在EditPlus中配置Perl开发编译环境

    在EditPlus中配置Perl开发编译环境

    这篇文章主要介绍了在EditPlus中配置Perl开发编译环境,配置起来蛮简单,适合小型开发环境,需要的朋友可以参考下
    2015-06-06
  • Perl 特殊变量详解

    Perl 特殊变量详解

    Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色,这篇文章主要介绍了Perl 特殊变量,需要的朋友可以参考下
    2025-01-01
  • Perl字符串比较和整数比较的区别详解

    Perl字符串比较和整数比较的区别详解

    这篇文章主要介绍了详解Perl字符串比较和整数比较的区别,需要的朋友可以参考下
    2017-09-09
  • perl 交叉编译详解

    perl 交叉编译详解

    Perl设计的初衷是为了更好地处理文本处理任务,但随着时间的发展,现在它已经变成了一种强大的一般目的编程语言,Perl是一种高级、通用、解释型、动态的编程语言,本文给大家介绍perl 交叉编译的相关知识,感谢的朋友跟随小编一起看看吧
    2024-04-04
  • perl中的$a和$b介绍

    perl中的$a和$b介绍

    有关perl中的$a和$b,这两个变量是为sort函数准备的内置变量,所以声明时可以不加 my
    2013-02-02
  • Perl中的控制结构学习笔记

    Perl中的控制结构学习笔记

    这篇文章主要介绍了Perl中的控制结构学习笔记,本文讲解了条件判断、循环语句、单行条件等内容,需要的朋友可以参考下
    2015-02-02
  • Perl的经典用法分享

    Perl的经典用法分享

    Perl的经典用法分享,学习perl的朋友可以参考下
    2013-02-02

最新评论