http://perlchina.org/advent/2009/HaveFun.html

=for advent_year 2009

=for advent_day 9

=for advent_title Have Fun

=for advent_author Fayland Lam

本文存属玩乐。

M<Acme::Pony>

=begin code

use Acme::Pony;
print "Hello world";

=end code

将上文保存为 hello.pl, 然后运行 perl hello.pl, 最后打开 hello.pl 你会发现整个文件都变了。变成了:

=begin pre

use Acme::Pony;
         bu
        ffYBUf
       fYbuFFYbU
      ffYbUFfyBUF
     fYBuffYbUFFy
      buffyBuffYb
       ufFybuffYbu         Ff
       YbUffYBuffYB       uFFyb
  uFFyBUfFYBUfFYbuffybUffYBUfFY
 BuFFYBuFFybUffYBUffyBUfFYbufFyb
 UFf  yBuffYbuFFyBUFfybUfFybuffY
  bUf     fybUffyBUffYBuFFYbufFyB
           uffy      BUFFYbUfFYBUF
           fYbU       fFybuFfyBUFf
           yBu          ffYbufFyBU
           FFY        bUf FYBUFfY
           bXX            XXX XXX
          XX              XXX
         XXX             XXX

=end pre

更惊奇的事情还在后头,重新运行 perl hello.pl, 你会发现它输出了 "Hello world". :)

如果上述还不够过瘾,试试下面的。

编辑一个 hello.pl

=begin code

print "Hello World\n";

=end code

然后创建一个 havefun.pl, paste 如下代码:

=begin code

use Acme::EyeDrops qw(sightly);
print sightly( {
    Shape       => 'camel',
    SourceFile  => 'hello.pl',
    Regex       => 1
} );

=end code

完毕后运行 perl havefun.pl > hello2.pl

打开 hello2.pl, 你会发现一只大骆驼

=begin pre

                                      ''=~('('.'?'
           .'{'.(                   '`'|'%').("\["^
        '-').('`'|                '!').('`'|',').'"'
 .('['^'+')  .('['^              ')').('`'|')').('`'|
'.').('['^'/').('{'^            '[').'\\'.'"'.('`'^'('
).('`'|'%').('`'|',')          .('`'|',').('`'|"\/").(
  '{'^'[').('{'^',').        ('`'|'/').('['^')').("\`"|
       ',').('`'|'$')      .'\\'.'\\'.('`'|'.').'\\'.'"'
      .';'.'"'."\}".     ')');$:='.'^'~';$~='@'|('(');$^=
     ')'^'[';$/='`'|   '.';$,='('^'}';$\='`'|'!';$:=(')')^
    '}';$~='*'|'`';   $^='+'^'_';$/='&'|'@';$,='['&('~');$\=
    ','^'|';$:='.'^  '~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,=
    '('^'}';$\='`'  |'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/=
    '&'|'@';$,='['  &'~';$\=','^'|';$:='.'^'~';$~='@'|"\(";$^=
    ')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*'
    |'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^'~'
     ;$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:
     =')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','
      ^'|';$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}'
       ;$\='`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,
        ='['&'~';$\=','^'|';$:='.'^'~';$~='@'|'(';$^=')'^'['; $/=
         '`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*'|'`'  ;$^
          ='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|' ;$:='.'^  '~'
            ;$~='@'|'(';$^=')'^'[';$/='`'|"\.";$,=  '('^'}'   ;$\
             ='`'| '!';$:=')'^'}';$~='*'|"\`";$^=   '+'^'_'   ;$/
                   ='&'|'@';$,='['&'~';$\=(',')^    '|';$:=   '.'
                   ^'~';$~=    '@'|'(';$^ ="\)"^     '[';$/   =(
                   ('`'))|     "\.";$,=   ('(')^     '}';$\  =(
                   ('`'))|     "\!";$:=   "\)"^       "\}";  (
                   ($~))=      '*'|'`';   ($^)         ='+'
                   ^"\_";     $/=('&')|   '@';         ($,)
                    ='['&     "\~";$\=    ','^         '|';
                    ($:)=     '.'^'~'     ;$~=         '@'|
                    '(';     $^=')'       ^'['         ;$/=
                    '`'|     '.'          ;$,=         '('^
                    '}';      $\=         '`'          |((
                    '!'        ));       $:=           ')'
                    ^((         '}'     ));            $~=
                    '*'          |((   '`'              ))
                    ;(             ($^))=               ((
                    ((              '+'))               ))
                    ^+             "\_";$/=             ((
                   '&'            ))|+ "\@";            $,
                  =((           '['))&  '~';           $\=
                 ','^         "\|";$:=   '.'          ^'~'
               ;($~)=                                ('@')|
             "\(";$^=                               ')'^'['

=end pre

如果你运行它,perl hello2.pl, 毫无疑问,上述图片是可运行的,输出还是 "Hello World".

如果骆驼不够好看,想看看 Larry Wall? 将 Shape => 'camel' 改为 Shape => 'larry', 重新运行
perl havefun.pl > hello2.pl 你会发现一个可以运行的 Larry Wall 图片:

=begin pre

                         ''=~('('.'?'.'{'
                      .('`'|'%').('['^"\-").(
                 '`'|'!').('`'|',').'"'.(('[')^
               '+').                         ('['
             ^')'                              ).(
           '`'|                                  ')'
         ).+(                                   (  '`'
        )|((                                    (   '.'
       ))))                                  .(  (    '['
     )^((                                   (     (    '/'
   )))                                    ))       .(   '{'
  ^((                                   ((           (   '['
 )))                                ))).              (   (((
(((                             '\\'                   )   )))
)))                         .'"'                        .   (((
'`'                ))^'(').(                            (   '`'
)|+              ((                                     (    ((
'%'             ))                                       )   ))
).(            (                                         (   ((
'`'            )                                          )))|+
','           )                                              .(
'`'           |          ',').('`'|'/').('{'^'[').('{'^(',')).(
'`'           |'/').("\["^    "\)").(    (    (   "\`"))|     (
','           )          ) .+(  '`'  |+  (    ( ((  '$'  )))  )
).+           (          ( '\\')).'\\'.  (    ( '`')|('.')).  (
(((           (          (               (    (               (
((   (((     (           (               (    ((              (
((   (  '\\')            )               )     ))             )
))   )                   )               )     ) )            )
))   )  )))               ))).'"'.';'.'"'       . '}'.')');$:=
((    (                              (          (          (
 (     (                            (          (           (
  (     (                            ( '.'    )            )
   )      )))                              ))             )
    )       )                  )))^'~';$~='@'|'(';$^      =
     (      (                ')'))^'[';$/='`'|'.';$,=     (
      (     (               '(')))^'}';$\='`'|"\!";$:=   (
       (   (                ')'))  )^'}';$~="\*"|  '`';  (
        ( (                 $^))  )              =  '+' ^
         ((                 '_'   ));$/='&'|'@';#;   #;#
          ;                                            #
          ;                                           #
          ;                                          #
         ;       #                                  ;
         #        ;                                #
         ;          #                             ;
         #            ;                          #
        ;               #                       ;   #
        ;                 #                    ;     #
       ;                    #;#              ;#       ;
      #                          ;#;#;#;#;#;            #

=end pre

更多更好玩的图片,请参考 M<Acme::EyeDrops>

更多更好玩的模块,有 M<Acme::Bleach>, M<Acme::Morse>, M<Acme::DWIM>,
M<Acme::Smirch>, M<Acme::Buffy >, M<Acme::AsciiArt2HtmlTable> 等。玩也玩不够。

Have Fun! Enjoy!

谢谢

-- 
Fayland Lam // http://www.fayland.org/

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“PerlChina Mongers 讨论组”论坛。
 要在此论坛发帖,请发电子邮件到 [email protected]
 要退订此论坛,请发邮件至 [email protected]
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

回复