Kleine Rädchen
Perl, Python und Ruby im Vergleich
Blocks
An dieser Stelle ist es unumgänglich auf einen Grundunterschied zwischen Perl, Python und Ruby einzugehen, nämlich die Blockstruktur. Bei Blocks handelt es sich um Code-Bereiche, die der Interpreter in irgendeiner Weise als Ganzes behandelt. Damit lassen sich mehrere Anweisungen zu einer Einheit zusammenfassen.
Will der Programmierer zum Beispiel abhängig von einer If-Unterscheidung gleich mehrere Anweisungen ausführen lassen, kapselt er sie in einen Block. In Perl und Ruby dienen dazu geschweifte Klammern (wie in C), Ruby erlaubt zusätzlich noch die Schlüsselwörter begin und end (ähnlich zu Pascal). Python dagegen verfolgt ein eher ungewöhnliches Konzept, in dem die Einrückungstiefe der einzelnen Anweisungen die Zugehörigkeit zu einem Block festlegt. Die Listings 8 bis 10 zeigen die Unterschiede.
Listing 8
Perl
if ($name == "Huber") {
print "Herr Huber hat die Nummer ";
print $telefon['Huber'];
}
elsif ($name == "Maier") {
print "Herr Maier hat die Nummer ";
print $telefon['Maier'];
}
else {
print "Unbekannter Name";
}
Listing 9
Python
if (name == "Huber"):
print "Herr Huber hat die Nummer "
print telefon['Huber']
elif (name == "Maier"):
print "Herr Maier hat die Nummer "
print telefon['Maier']
else:
print "Unbekannter Name"
Listing 10
Ruby
if (name == "Huber") {
print "Herr Huber hat die Nummer "
print telefon['Huber']
}
elsif (name == "Maier") {
print "Herr Maier hat die Nummer "
print telefon['Maier']
}
else {
print "Unbekannter Name"
}
Wie man sieht, spart Python dadurch einige Klammern ein, allerdings muss der Programmierer genau auf jedes Leerzeichen achten. Zum Beispiel macht es einen Unterschied, ob er ein Tab-Zeichen verwendet oder mehrere Leerzeichen, obwohl der Code auf den ersten Blick gleich aussieht.
Schleifen
Ein Großteil jedes Programms besteht aus der wiederholten Anwendung von Anweisungen auf strukturell gleiche Daten. So besteht der Sinn von Adressanwendungen oft gerade darin, die vorhandenen Datensätze zu durchlaufen, und mit ihnen etwas anzustellen – zum Beispiel einen Serienbrief zu verschicken. Jede Skriptsprache bietet dazu verschiedene Schleifenkonstrukte. Der einfachste Fall ist eine For-Schleife, die einen Block von Anweisungen soundso oft durchläuft: "Mach' das Folgende x-Mal". In Perl sieht das so aus: for ($i = 0; $i <= 10; $i++). Ein folgender Block wird damit 11-Mal durchlaufen – die Zählung beginnt ja bei 0!
In Python und Ruby existieren Konstrukte, die ähnlich funktionieren, aber syntaktisch anders aufgebaut sind. Ruby realisiert eine solche Schleife mit for i in 0..10. Python benutzt dafür for i in range(11). Die Zahl 11 gibt im Unterschied zu den beiden anderen Sprachen nicht die Obergrenze der Zählung, sondern den größten Wert an.
Diese Schleifen setzen voraus, dass der Programmierer die Zahl der Durchläufe schon vorher kennt. bei von Listen und Hashes ist es aber häufig notwendig, einfach alle Elemente durchzugehen. Deshalb bieten die meisten Skriptsprachen dafür spezielle syntaktische Konstrukte wie foreach in Perl.



