FHEM Forum

FHEM - Entwicklung => FHEM Development => Perl Ecke => Thema gestartet von: RichardCZ am 26 März 2020, 17:05:07

Titel: Ein bischen Spaß muss sein: Quine
Beitrag von: RichardCZ am 26 März 2020, 17:05:07
Dieser Code ist schon ein paar Jahre alt und stammt von PerlMonks. Ich habe nur den Aufruf leicht modifiziert, weil heutige Rechner so schnell sind, dass man den Effekt gar nicht sehen würde

Theoretisch solltet ihr unter Linux auf der Kommandozeile den Code unten (als Datei "spiral.pl") so laufen lassen können:

spiral.pl | perl -we 'use Time::HiRes "sleep"; $/="\e"; while(<>){ print; sleep 0.04 }'

dann könnt ihr laufendem Perl Code dabei zusehen, wie er sich selbst modifiziert. Das ist natürlich unwartbar und so ziemlich am anderen Spektrum dessen, was wir für FHEM möchten. Aber es ist funny und vielleicht demonstriert es auch ein wenig das Potential eines Mustangs "der einem die Zähne einkickt wenn man ihn nicht bändigt".

Auf jeden Fall als kleiner Kontrast zum drögen PBP "mach dies, mach nicht das" gedacht. Have fun!  8)

Code (perl) Auswählen
#!/usr/bin/env perl
$_='
         $q ="\                   47"; wh
        ile                           ($ ;=
      $z                +=              .5 ){
    %c=           $r=0;$/ ="";whi         le(2
   0+          $z>($;+=.05)){$c{int$       _+ 2
  6+         2*($              r+= .0       2) *
s          in$                   ;}{1       -$_
+1         0+           int        $r*c       o s
$         ;}         =1for(0.       .1)        }$
t        =r         ever se;$        /.        =`
c        le        ar     `.         "         #!
/        usr       /bi             n/         pe
rl       \n\       $_ =$q        \n"          ;
fo        r$y        (1..20){$c{$_}          {
$ y       }? $         /.=chop$t            :
($/        . ="                          \4
0")         for(0.                    .99)          ;
   $/.        ="\n"}pri            nt"$/$          q;
   s; ".         chr(9 2)."s;;g;eval\n           "}

';s;\s;;g;eval


# call this script in shell like this:
# spiral.pl | perl -we 'use Time::HiRes "sleep"; $/="\e"; while(<>){ print; sleep 0.04 }'