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

所属分类: 脚本专栏 / perl 阅读数: 272
收藏 0 赞 0 分享
原始代码
代码出处: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 指定长度并生成一个随机的DNA序列的脚本代码

perl 指定长度并生成一个随机的DNA序列的代码,有需要的朋友可以参考下
收藏 0 赞 0 分享

perl生成特定碱基比例的随机序列的代码

怎么用perl程序,随机生成一条序列,使ACGT四种碱基的含量分别为0.3,0.3,0.2,0.2!
收藏 0 赞 0 分享

学习perl的unless控制结构

在perl的if控制结构中,只有当条件表达式为真时才执行某块代码。如果想让程序块在条件为假时才执行,此时可以把if改成unless
收藏 0 赞 0 分享

有关perl正则表达式的一些杂项

有关perl正则表达式的一些杂项,有需要的朋友可以参考下
收藏 0 赞 0 分享

perl中heredoc使用说明

在成块打印文本的时候特别有用,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl使用chdir的实例代码

Perl使用chdir的例子,供朋友们参考学习
收藏 0 赞 0 分享

perl特殊符号及默认的内部变量

perl特殊符号及默认的内部变量,有需要的朋友不妨参考下
收藏 0 赞 0 分享

perl中my与our的区别介绍

our 和 my 一样,都是对变量的声明,不过 our 声明的是包全局变量,而 my 声明的是词法变量
收藏 0 赞 0 分享

在vim中添加perl注释时无法对齐问题的解决方法

在使用vim编辑perl脚本时,每当输入#号时,#号都会跑到行首问题,需要的朋友可以参考下
收藏 0 赞 0 分享

perl 文件操作总结

perl 文件操作总结,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多