Logo Algorilla Schriftzug Algorilla

Lösungen zu ausgewählten Aufgaben

Lösung zu Aufgabe 55 (Autograph)

Eingesendet von Franz Fritsche


   $a = 'print "\$a = \x27$a\x27;\n$a";';    print "\$a = \x27$a\x27;\n$a";

Erklärung zur Lösung

Wir gehen aus von dem Zweizeiler:
     $a = 'bla bla';
     print "\$a = \x27$a\x27;\n$a";
Erklärung der zweiten Zeile:
  1. Das "\" vor "$a" bewirkt, dass "$a" ausgedruckt wird. D.h. "$a" wird nun NICHT als Variable aufgefasst (und daher substituiert), sondern als auszudruckender Text.

  2. "\x27" druckt das Zeichen " ' ", also den einfachen "Anführungsstrich". Und "\n" gibt bekanntlich einen "Zeilenvorschub" aus.
Es wird dann ausgedruckt:
     $a = 'bla bla';
     bla bla
Das dürfte so weit klar sein... Wichtig dabei ist NUR, dass die Form der Ausgabe unabhängig ist von dem konkreten Text (-hier-) "bla bla", der der Variablen $a zugewiesen wird im Source-Code!

Nun ersetze ich ganz einfach den Text
     bla bla
der $a in der ersten Zeile des Programms zugewiesen wird, durch den Text der zweiten Zeile:
     print "\$a = \x27$a\x27;\n$a";
Damit erhalten wir dann folgendes Programm:
     $a = 'print "\$a = \x27$a\x27;\n$a";';
     print "\$a = \x27$a\x27;\n$a";
Ausgedruckt wird nun:
     $a = 'print "\$a = \x27$a\x27;\n$a";';
     print "\$a = \x27$a\x27;\n$a";
Das war's auch schon!