Kleine Rädchen
Perl, Python und Ruby im Vergleich
Objektorientiert vs. prozedural
An dieser Stelle zeigt sich ein Unterschied zwischen Perl und den beiden anderen vorgestellten Skriptsprachen, der bisher nicht zur Sprache kam: Python und Ruby sind von Grund auf objektorientiert. Nun lässt sich trefflich philosophieren, was Objektorientierung bedeutet, wir wollen es bei einigen Andeutungen belassen.
Die meisten Funktionen eines Programms sind bei der objektorientierten Programmierung an die Daten gebunden, die sie verarbeiten sollen. Diese Daten repräsentiert ein so genanntes Objekt. Im hier mehrfach verwendeten Adressbeispiel könnte es Objekte für Personen oder Adressen geben. Funktionen – oder im Objekt-Jargon: Methoden – könnten dann sein: das Anlegen, Verändern, Löschen von Adress- und Personendaten.
Weil Ruby noch mehr als Python auf Objektorientierung setzt, bietet es ein paar mehr ungewöhnliche Konstruktionen, die aber auch nichts anderes tun als ihre Python-Pendants. So ist es in Ruby nicht nötig, mit einer eingebauten Funktion foreach durch eine Liste zu wandern. Jede Liste besitzt, ererbt vom Elternobjekt, eine Methode each. Ein Ruby-Programmierer durchläuft eine Liste gerne mit liste.each { |elem| print elem }. Das in Pipe-Symbole eingeschlossene elem steht für das Listenelement beim jeweiligen Durchlauf. Viele Ruby-Objekte besitzen solche so genannten Iteratoren, weshalb man in Ruby-Code häufig auf solche Konstruktionen stößt.
Natürlich kann man mit Objektorientierung auch nichts anderes machen als mit der so genannten prozeduralen Programmierung wie in Perl, aber dieser Ansatz verhilft zumindest bei größeren Skriptprogramme zu übersichtlicherer Struktur und hoffentlich weniger Fehlern. Bei kleinen Skripts führt objektorientierte Programmierung eher zu mehr Schreibaufwand, aber auch in Python und Ruby lassen sich natürlich auch kleine Hacks schreiben.
Systemnähe
Die meisten schnellen Hacks mit Skriptsprachen unter Linux haben etwas damit zu tun, dass man zum Beispiel eine Datei einliest. Schließlich leisten die ganzen Variablen und Kontrollstrukturen erst etwas, wenn sie auch Daten zu verarbeiten haben. Deshalb ist jede Skriptsprache nur so gut wie ihre Bibliotheken, die umfassende Dienste für die Kommunikation mit dem Linux-System leisten: Sie müssen mindestens mit Dateien umgehen, Webseiten aus dem Internet holen, Regular Expressions beherrschen, XML-Dateien verstehen und vieles mehr.
Alle hier vorgestellten Skriptsprachen beherrschen die wichtigsten Anwendungsbereiche ausreichend gut. Das ist auch der Grund für ihre Popularität: Durch die Einfachheit von Variablen und Typen zusammen mit den umfangreichen Bibliotheken lassen sich mit wenigen Zeilen funktionsreiche Skripts schreiben.
Wie dieser Artikel zu zeigen versucht hat, bestehen die Unterschiede zwischen den Perl, Python und Ruby für einfach Anwendungsfälle nur in syntaktischen Feinheiten. Bei größeren Projekten sind Python und Ruby von Haus aus durch ihre Objektorientierung geeignete Kandidaten. Für welche Sprache man sich entscheidet, ist letztlich auch Geschmackssache
Zum Ausprobieren ist ein interaktiver Modus praktisch, wie ihn Python bietet, wenn Sie einfach nur den Interpreter python starten (Abbildung 1). Sie verlassen ihn wieder mit [Strg]+[D]. Bei Ruby dient dazu das separate Programm irb, das Sie über den Paketmanager nachinstallieren. wenn es fehlt. Für Perl gibt es leider nur die etwas unkomfortable Lösung, den Interpreter mit perl -de 42 im Debugging-Modus aufzurufen oder eine der Perl-Shells wie psh zu verwenden, die im Internet kursieren. Dort finden Sie auch zu jeder der drei vorgestellten Skriptsprachen eine Unmenge an Informationen für Anfänger und Fortgeschrittene. Lohnenswert ist auf jeden Fall ein Blick auf die PLEAC-Website, welche alle Beispiele des Perl Cookbook in vielen Sprachen nachbaut [4].
Glossar
Mono
Eine zu Microsofts .NET kompatible Entwicklungs- und Laufzeit-Umgebung für Software. Das Open-Source-Projekt wird hauptsächlich von Novell (Ximian) vorangetrieben.
Interpreter
Ein Programm, das einen Quellcode sondern einliest, zur Laufzeit analysiert und direkt ausführt. Im Gegensatz wandeln Assembler oder Compilern den Code in eine auf dem System direkt ausführbare Datei um.
Variablen
Speicherbereiche, in denen Werte gespeichert werden können. Der Inhalt wird über den Variablen-Namen angesprochen. Man unterscheidet Variablen nach ihrem Gültigkeitsbereich in lokale (gültig nur innerhalb eines Blocks) und globale (gültig im ganzen Programm) Variablen.
Infos
[1] Perl: http://www.perl.com
[2] Python: http://www.python.org
[3] Ruby: http://www.ruby-lang.org
[4] PLEAC: http://pleac.sourceforge.net



