13 December 2005
This post may be outdated due to it was written on 2005. The links may be broken. The code may be not working anymore. Leave comments if needed.
有时候写 Perl 代码写得很累的时候,可以玩一下。
CPAN 中以 Acme 开头的模块很多都是用来 play 的。
一起来玩一下吧。

Acme::Pony

当然,你得先安装它。cpan Acme::Pony
安装完毕后,写一个简单的 Perl 文件(t.pl)
use Acme::Pony;
print "Hello world";
然后 perl t.pl
Woo, 再看看你的 t.pl, 看看它变成了什么:
use Acme::Pony;
buf
fYBUff
YbuFFYbU
ffYbUFfyBU
FfYBuffYbUF
FybuffyBu
ffYbufFybuf fYbu
Ff YbUffYBuffYBuFFybuFFyBU
fFYBUfFYbuffybUffYBUfFYBuFFYB
uFF ybUffYBUffyBUfFYbufFybUFf
yBu ffYbuFFyBUFfybUfFybufFY
BUFf YbUFFYBuFfYb
Uffy BufFYBufFy
buF fybUfFYBU
Ff Yb UFFYBuF
fX XX XXX
XXX XX
XX XX
更惊奇的在后头,它可以被运行。 perl t.pl 输出了 Hello world
很不可思议吧。

Acme::Bleach

在 David Cantrell 写完 Acme::Pony 后很多人都开始搞怪。比如 Damian Conway, 他就写了 Acme::Bleach , Acme::DWIMAcme::Morse
安装完它们后一个个试试吧。
use Acme::Bleach;
print "Hello world";
perl t.pl 后,这文件变成了:
use Acme::Bleach;
                                           
                   
                   
               
           
           
       
               
               
                       
               
               
                           
                   
                   
           
           
               
是不是什么都看不见。其实其中都是空格,你用鼠标反白它就看见了。
再运行它 perl t.pl 就会输出 Hello world
都是空白的东西输出了 Hello world, 玩得还可以吧。

Acme::Morse

use Acme::Morse;
print "S-O-S\n";
Morse 的意思为“摩尔斯式电码”。所以运行它后该文件会变为:
use Acme::Morse;
.--.-..--..---.-.--..--.-..--..---.-.--.
....---..-..---.-..-.--..---.--...-.---.
.....-...-...-..--..-.-.-.--.-..----..-.
-.--.-..--..-.-...---.-..---.--..-...-..
--.---..
还是一样,再运行它会输出 S-O-S

Acme::EyeDrops

Acme::EyeDrops 这是最最好玩的一个模块。想把 Perl 代码变为我们最爱的骆驼吗?跟我来吧:

  1. 创立一个 helloworld.pl 文件。内容为:
    print "hello world\n";
    当然也可以为你喜欢输出的内容。
  2. 创立一个 t.pl 文件。内容为:
    use Acme::EyeDrops qw(sightly);
    print sightly( { Shape => 'camel',
    SourceFile => 'helloworld.pl',
    Regex => 1 } );
  3. 运行 perl t.pl >camel.pl
    将运行的结果输入 camel.pl
  4. 打开 camel.pl, Woo000ooo0o0oooooooo00oooooooooooooo! 骆驼:
                                          ''=~('('.'?'
    .'{'.( '`'|'%').("\["^
    '-').('`'| '!').('`'|',').'"'
    .('['^'+') .('['^ ')').('`'|')').('`'|
    '.').('['^'/').('{'^ '[').'\\'.'"'.('`'|'('
    ).('`'|'%').('`'|',') .('`'|',').('`'|"\/").(
    '{'^'[').('['^','). ('`'|'/').('['^')').("\`"|
    ',').('`'|'$') .'\\'.'\\'.('`'|'.').'\\'.'"'
    .';'.'"'."\}". ')');$:='.'^'~';$~='@'|('(');$^=
    ')'^'[';$/='`'| '.';$,='('^'}';$\='`'|'!';$:=(')')^
    '}';$~='*'|'`'; $^='+'^'_';$/='&'|'@';$,='['&('~');$\=
    ','^'|';$:='.'^ '~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,=
    '('^'}';$\='`' |'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/=
    '&'|'@';$,='[' &'~';$\=','^'|';$:='.'^'~';$~='@'|"\(";$^=
    ')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*'
    |'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^'~'
    ;$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:
    =')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','
    ^'|';$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}'
    ;$\='`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,
    ='['&'~';$\=','^'|';$:='.'^'~';$~='@'|'(';$^=')'^'['; $/=
    '`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*'|'`' ;$^
    ='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|' ;$:='.'^ '~'
    ;$~='@'|'(';$^=')'^'[';$/='`'|"\.";$,= '('^'}' ;$\
    ='`'| '!';$:=')'^'}';$~='*'|"\`";$^= '+'^'_' ;$/
    ='&'|'@';$,='['&'~';$\=(',')^ '|';$:= '.'
    ^'~';$~= '@'|'(';$^ ="\)"^ '[';$/ =(
    ('`'))| "\.";$,= ('(')^ '}';$\ =(
    ('`'))| "\!";$:= "\)"^ "\}"; (
    ($~))= '*'|'`'; ($^) ='+'
    ^"\_"; $/=('&')| '@'; ($,)
    ='['& "\~";$\= ','^ '|';
    ($:)= '.'^'~' ;$~= '@'|
    '('; $^=')' ^'[' ;$/=
    '`'| '.' ;$,= '('^
    '}'; $\= '`' |((
    '!' )); $:= ')'
    ^(( '}' )); $~=
    '*' |(( '`' ))
    ;( ($^))= ((
    (( '+')) ))
    ^+ "\_";$/= ((
    '&' ))|+ "\@"; $,
    =(( '['))& '~'; $\=
    ','^ "\|";$:= '.' ^'~'
    ;($~)= ('@')|
    "\(";$^= ')'^'['
    这就是我们心爱的骆驼。
  5. perl camel.pl 它还能运行。而且输出原来的东西。

除了骆驼还有很多好玩的形状。试试这个:
use Acme::EyeDrops qw(sightly);
print sightly( { Shape => 'larry',
SourceFile => 'helloworld.pl',
Regex => 1 } );
运行 perl t.pl >larry.pl
打开 larry.pl 看看会变成什么:
                         ''=~('('.'?'.'{'
.('`'|'%').('['^"\-").(
'`'|'!').('`'|',').'"'.(('[')^
'+'). ('['
^')' ).(
'`'| ')'
).+( ( '`'
)|(( ( '.'
)))) .( ( '['
)^(( ( ( '/'
))) )) .( '{'
^(( (( ( '['
))) ))). ( (((
((( '\\' ) )))
))) .'"' . (((
'`' ))|'(').( ( '`'
)|+ (( ( ((
'%' )) ) ))
).( ( ( ((
'`' ) )))|+
',' ) .(
'`' | ',').('`'|'/').('{'^'[').('['^(',')).(
'`' |'/').("\["^ "\)").( ( ( "\`"))| (
',' ) ) .+( '`' |+ ( ( (( '$' ))) )
).+ ( ( '\\')).'\\'. ( ( '`')|('.')). (
((( ( ( ( ( (
(( ((( ( ( ( (( (
(( ( '\\') ) ) )) )
)) ) ) ) ) ) )
)) ) ))) ))).'"'.';'.'"' . '}'.')');$:=
(( ( ( ( (
( ( ( ( (
( ( ( '.' ) )
) ))) )) )
) ) )))^'~';$~='@'|'(';$^ =
( ( ')'))^'[';$/='`'|'.';$,= (
( ( '(')))^'}';$\='`'|"\!";$:= (
( ( ')')) )^'}';$~="\*"| '`'; (
( ( $^)) ) = '+' ^
(( '_' ));$/='&'|'@';#; #;#
; #
; #
; #
; # ;
# ; #
; # ;
# ; #
; # ; #
; # ; #
; #;# ;# ;
# ;#;#;#;#;#; #
还有很多很多形状。看看 Acme::EyeDrops 的文档。这是我见过的最棒的模块。

Filter::Simple

这样的 Perl code 看起来像不像密码?
perl 中还有个模块 Filter::Simple 专门用来将 perl code 变为谁也看不懂的密码。
有空诸位可以试试。

Enjoy!

Have fun. :->>

Reference

http://www.perladvent.org/2001/6th/


blog comments powered by Disqus