Мощь и красота Perl

…Ибо программирование есть искусство…

Всё-таки с , наверное, не сравнится ни один язык программирования: какие красивые и не очевидные вещи на нём можно творить… Хотя, с другой стороны, интуитивно-понятный код — это когда смотришь, и сразу интуитивно понятно, что это — код.

Например,

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

Весьма очевидно, что данный кусок кода выводит на экран фразу Just another Perl hacker. :-)

Или такой пример:

[-]
View Code Perl
@ARGV=split(/\S\n?/,<<EOF);$a+=length(shift),vec($_,$a,1)=1while@ARGV;print;
 :-)  :-)   :-)  :-)  :-)  :-) :-) :-)  :-) :-)   :-) :-) :-)    :-)  :-) :-)
 :-)       :-)   :-)     :-) :-)   :-) :-) :-)  :-) :-)  :-) :-) :-) :-)  :-)
 :-)    :-)  :-) :-) :-)     :-)  :-) :-)  :-)  :-)   :-) :-)   :-)   :-) :-)
 :-)       :-)       :-)  :-)  :-)  :-)   :-) :-)   :-)   :-) :-) :-)    :-)
 :-)  :-) :-)       :-)      :-)  :-) :-)  :-)     :-) :-)  :-) :-)    :-) :-)
  :-) :-)  :-)  :-) :-)  :-)  :-)   :-) :-)   :-)   :-) :-) :-)    :-) :-)  :-)
EOF

Он также выводит примерно аналогичную фразу.

Художественный пример:

[-]
View Code Perl
use strict;

                                           $_='ev
                                       al("seek\040D
           ATA,0,                  0;");foreach(1..3)
       {<DATA>;}my               @camel1hump;my$camel;
  my$Camel  ;while(             <DATA>){$_=sprintf("%-6
9s",$_);my@dromedary           1=split(//);if(defined($
_=<DATA>)){@camel1hum        p=split(//);}while(@dromeda
 ry1){my$camel1hump=0      ;my$CAMEL=3;if(defined($_=shif
        t(@dromedary1    ))&&/\S/){$camel1hump+=1<<$CAMEL;}
       $CAMEL--;if(d   efined($_=shift(@dromedary1))&&/\S/){
      $camel1hump+=1  <<$CAMEL;}$CAMEL--;if(defined($_=shift(
     @camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if(
     defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME
     L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h
      ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@
      camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\
      064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse;
       print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y
        /LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/;
         $_=reverse;print"\040$_$Camel\n";}'
;;s/\s*//g;;eval;   eval
           ("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;(   );;s
             ;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__   \124
               \1   50\145\040\165\163\145\040\157\1 46\040\1  41\0
                    40\143\141  \155\145\1 54\040\1   51\155\  141
                    \147\145\0  40\151\156 \040\141    \163\16 3\
                     157\143\   151\141\16  4\151\1     57\156
                     \040\167  \151\164\1   50\040\      120\1
                     45\162\   154\040\15    1\163\      040\14
                     1\040\1   64\162\1      41\144       \145\
                     155\14    1\162\       153\04        0\157
                      \146\     040\11     7\047\         122\1
                      45\15      1\154\1  54\171          \040
                      \046\         012\101\16            3\16
                      3\15           7\143\15             1\14
                      1\16            4\145\163           \054
                     \040            \111\156\14         3\056
                    \040\         125\163\145\14         4\040\
                    167\1        51\164\1  50\0         40\160\
                  145\162                              \155\151
                \163\163                                \151\1
              57\156\056

Выводит такой вот :

        .XXXXXXLm.        .mm.           .mm.        .mJXXXXXX.
       .XXXXXXXXXXL      .XXX^XLmm   mmJX^XXX.      JXXXXXXXXXX.
       JXXXXXXXXXXXL.   .XXXXXXXXXX XXXXXXXXXX.   .JXXXXXXXXXXXL
     .JXXXXXXXXXXXXXXL. {XXXXXX^^^' `^^^XXXXXX} .JXXXXXXXXXXXXXXL.
    .XXXXXXXXXXXXXXXXXXL XXXXXXL       JXXXXXX JXXXXXXXXXXXXXXXXXX.
   mXXXXXXXXXXXXXXXXXXXXXXXXXXXX}     {XXXXXXXXXXXXXXXXXXXXXXXXXXXXm
  JXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'     `XXXXXXXXXXXXXXXXXXXXXXXXXXXXXL
 JXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXL
 XXFXXXXXXXXXXXXXXXXXXXXXXXXXXX'       `XXXXXXXXXXXXXXXXXXXXXXXXXXX7XX
 XX {XXXXXXXXXXXXXXXXXXXXXXXXF'         `7XXXXXXXXXXXXXXXXXXXXXXXX} XX
 7X.{XXX}XXXXXXXXXXXXXXXX^7F'             `7F^XXXXXXXXXXXXXXXX{XXX}.XF
  7}JXXF {XXX}XXXXX XXXXX                     XXXXX XXXXX{XXX} 7XXL{F
    XXF  {XXX 7XXXX.{XXX}                     {XXX}.XXXXF XXX}  7XX
   {XX'  {XX} `7XXX} XXX}                     {XXX {XXXF' {XX}  `XX}
   {XX    7XX.  JXX' {XX'                     `XX} `XXL  .XXF    XX}
    XX     ^XXmXX^'  {XX                       XX}  `^XXmXX^     XX
    XX     .JXXX'     XX                       XX     `XXXL.     XX
   .XX}    XXXXXLm    {XL                     JX}    mJXXXXX    {XX.
   {XXX.   `^'`^^^'   {XXm                   mXX}   `^^^'`^'   .XXX}
    ^^^                XXXXm               mXXXX                ^^^

      .mm.        .mJXXXXXX.                .XXXXXXLm.        .mm.
  mmJX^XXX.      JXXXXXXXXXX.              .XXXXXXXXXXL      .XXX^XLmm
 XXXXXXXXXX.   .JXXXXXXXXXXXL              JXXXXXXXXXXXL.   .XXXXXXXXXX
 `^^^XXXXXX} .JXXXXXXXXXXXXXXL.          .JXXXXXXXXXXXXXXL. {XXXXXX^^^'
    JXXXXXX JXXXXXXXXXXXXXXXXXX.        .XXXXXXXXXXXXXXXXXXL XXXXXXL
   {XXXXXXXXXXXXXXXXXXXXXXXXXXXXm      mXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
   `XXXXXXXXXXXXXXXXXXXXXXXXXXXXXL    JXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXL  JXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    `XXXXXXXXXXXXXXXXXXXXXXXXXXX7XX  XXFXXXXXXXXXXXXXXXXXXXXXXXXXXX'
     `7XXXXXXXXXXXXXXXXXXXXXXXX} XX  XX {XXXXXXXXXXXXXXXXXXXXXXXXF'
       `7F^XXXXXXXXXXXXXXXX{XXX}.XF  7X.{XXX}XXXXXXXXXXXXXXXX^7F'
           XXXXX XXXXX{XXX} 7XXL{F    7}JXXF {XXX}XXXXX XXXXX
           {XXX}.XXXXF XXX}  7XX        XXF  {XXX 7XXXX.{XXX}
           {XXX {XXXF' {XX}  `XX}      {XX'  {XX} `7XXX} XXX}
           `XX} `XXL  .XXF    XX}      {XX    7XX.  JXX' {XX'
            XX}  `^XXmXX^     XX        XX     ^XXmXX^'  {XX
            XX     `XXXL.     XX        XX     .JXXX'     XX
           JX}    mJXXXXX    {XX.      .XX}    XXXXXLm    {XL
          mXX}   `^^^'`^'   .XXX}      {XXX.   `^'`^^^'   {XXm
        mXXXX                ^^^        ^^^                XXXXm
The use of a camel image in association with Perl is a trademark of O'Reilly &
Associates, Inc. Used with permission.

И еще один пример:

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

Результатом его работы будет считалочка (полностью не привожу):

99 bottles of beer on the wall, 99 bottles of beer!
Take one down, pass it around,
98 bottles of beer on the wall!

98 bottles of beer on the wall, 98 bottles of beer!
Take one down, pass it around,
97 bottles of beer on the wall!

97 bottles of beer on the wall, 97 bottles of beer!
Take one down, pass it around,
96 bottles of beer on the wall!

...

2 bottles of beer on the wall, 2 bottles of beer!
Take one down, pass it around,
1 bottle of beer on the wall!
1 bottle of beer on the wall, 1 bottle of beer!
Take one down, pass it around,
No bottles of beer on the wall!

Ну на каком еще языке можно так извратиться?! :-)

Автор: ; опубликовано в: Всё подряд; метки: ASCII art, Perl
7
Авг
2008

RSS Комментарии к статье «Мощь и красота Perl» (7)  »

  1. апупеть, кстати в яндекс ридере код с верблюдом побило так, что я сначало подумал, что это девушка+парень причем в интересной позе. :)

    01.gif

  2. А чем не понравился мой комментарий то?

  3. упс, гоню. куки почистил.

  4. Примеры суперские :)

  5. Комментарий понравился, просто я далеко на отдыхе и не имею возможности часто проверять почту.

  6. Jman: побило аски потому, что шрифт не моноширинный ;)

  7. [...] у 85% процентов сканеров User-Agent установлен в libwww-perl (ибо Perl — истинно хакерский язык); [...]

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Мощь и красота Perl»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा