Ars Longa, Vita Brevis

Авг 7, 2008

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

Рубрика: Всё подряд
Метки: ,
Vladimir @ 10:17 пп
RSS 2.0

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

Всё-таки с 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

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

        .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!

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

Добавить в закладки
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • БобрДобр
  • Мистер Вонг
  • Яндекс.Закладки
  • Текст 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Закладки Google
  • Писали
  • СМИ 2
  • Моё Место
  • Сто Закладок
  • Ваау!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - I.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA

Комментарии к статье "Мощь и красота Perl" (6) »

  1. [Август 8, 2008 8:17 дп] Jman:

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

    01.gif

    #1
  2. [Август 8, 2008 3:22 пп] Jman:

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

    #2
  3. [Август 8, 2008 3:24 пп] Jman:

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

    #3
  4. [Август 8, 2008 11:32 пп] SaltyDog:

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

    #4
  5. [Август 10, 2008 11:08 пп] Vladimir:

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

    #5
  6. [Август 11, 2008 12:59 пп] SaltyDog:

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

    #6

RSS лента комментариев к этой записи. TrackBack URL

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

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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

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