求婚示爱的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?

(0)

相关推荐

  • 求婚示爱的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])}su

  • 求婚示爱的Perl代码之改写篇

    改写代码 #!/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     

  • 将python代码和注释分离的方法

    python的注释方式和C语言.C++.java有所不同 python语言中,使用'#' 来进行注释,其次还有使用 三个引号来进行注释 本文的程序将把 python 中 使用'#' 号 好 三个引号的注释分离出来, 当然也能再次合并回去 有需求的小伙伴可以来围观了 #!/usr/bin/python #coding=utf-8 import os import sys reload(sys) sys.setdefaultencoding('utf-8') class Comment_Filter

  • 在Pycharm中对代码进行注释和缩进的方法详解

    一.注释 1. #单行注释 2. """ 多行注释 """ 3. pycharm多行注释快捷键:Ctrl+/ 二.缩进 缩进:Tab 反向缩进:Shift+Tab 以上这篇在Pycharm中对代码进行注释和缩进的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python代码如何注释

    注释 注释就是对代码的解释和说明.目的是为了让别人和自己很容易看懂.为了让别人一看就知道这段代码是做什么用的.正确的程序注释一般包括序言性注释和功能性注释.序言性注释的主要内容包括模块的接口.数据的描述和模块的功能.模块的功能性注释的主要内容包括程序段的功能.语句的功能和数据的状态. 注释的分类 1.单行注释 以#开头,#右边的所有东西当做说明,而不是真正要执行的程序,起辅助说明作用 #我是注释,可以在这里写一下功能说明之类 print("我上面一行是对我的注释") 2.多行注释 多行

  • c++代码各种注释示例详解

    目录 1.前言 2.正文(危) 1.以代码例子为例 (1)代码段1 (2)代码段2 (3)代码段3 (4)代码段4 2.其它的注释方法 (1)条件编译 (2)if条件 1.前言 今天想带大家来了解一下注释,当然,是C语言中的注释,这个大家都并不会感到陌生,但是,当有一天面试官问你?小伙子啊,你能给我讲讲什么是注释吗?大家应该都会懵的吧,毕竟注释有什么可讲的呢?但是事实真的如此吗?今天就由我来带大家了解一下注释吧! 2.正文(危) 1.以代码例子为例 (1)代码段1 首先来几段注释的例子大家来判断

  • 一个简单的php MVC留言本实例代码(必看篇)

    摘要 标题上我把这个留言板叫最简单的,其实应该叫最简陋的,因为把全部注意力集中在MVC模式设计和实现上,所以UI方面几乎没有一点修饰. 这个小程序一共包含6个文件,其中index.php是程序入口.post.htm是留言表单.在lib文件夹里Model.View .Controller三个文件分别实现MVC,DataAccess是一个简单的数据库访问类.其实这个程序是国外的一个人写的. PHP代码: /** * 一个用来访问MySQL的类 * 仅仅实现演示所需的基本功能,没有容错等 * 代码未作

  • 不间断循环滚动效果的实例代码(必看篇)

    蛮优秀的一段效果代码,可以上下左右滚动,收藏了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&q

  • 在Python的Django框架中为代码添加注释的方法

    就像HTML或者Python,Django模板语言同样提供代码注释. 注释使用 {# #} : {# This is a comment #} 注释的内容不会在模板渲染时输出. 用这种语法的注释不能跨越多行. 这个限制是为了提高模板解析的性能. 在下面这个模板中,输出结果和模板本身是 完全一样的(也就是说,注释标签并没有被解析为注释): This is a {# this is not a comment #} test. 如果要实现多行注释,可以使用`` {% comment %}`` 模板标

  • asp.net画曲线图(折线图)代码 详细注释

    复制代码 代码如下: using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI

随机推荐