Von Perl zu Ruby

Perl ist toll. Perls Dokumentation ist toll. Die Perl-Community ist … toll. Allerdings ist die Sprache ziemlich umfangreich und unbestritten komplex. Für Perl-Programmierer, die sich eine einfachere und eindeutigere Sprache mit von Grund auf integrierter Objektorientierung wünschen, könnte Ruby genau das Richtige sein.

Gemeinsamkeiten

Genau wie Perl hat Ruby…

  • Ein Paketverwaltungssystem, ähnlich wie CPAN (allerdings heißt es RubyGems).
  • Reguläre Ausdrücke (Regexes) sind in die Sprache integriert. Bon appétit!
  • Die enthaltene Standardbibliothek stellt bereits viele der häufig benötigten Funktionen zur Verfügung.
  • Klammern sind oft optional.
  • Zeichenketten (Strings) funktionieren im Prinzip genau gleich.
  • Es gibt eine verallgemeinerte Syntax für Begrenzer von Zeichenketten und regulären Ausdrücken, ähnlich wie bei Perl. Das sieht %q{so} (einfache Anführungszeichen) oder %Q{so} (doppelte Anführungszeichen) aus, und %w{so für eine Liste von Wörtern} (einfache Anführungszeichen). Man %Q|kann| %Q(auch) %Q^andere^ Begrenzer verwenden.
  • Es gibt Interpolation in Zeichenketten mit doppelten Anführungszeichen, das "sieht #{so} aus" (dabei kann innerhalb von #{} beliebiger Ruby-Code stehen).
  • Für Shell-Kommandosubstitution werden `Backticks` verwendet.
  • Es gibt eingebaute Dokumentationswerkzeuge (in Ruby “rdoc” genannt).

Unterschiede

Anders als in Perl…

  • Gibt es keine kontextabhängigen Syntaxregeln wie in Perl.
  • Variablen sind nicht dasselbe wie die durch sie referenzierten Objekte. Stattdessen sind sie immer nur Referenzen auf ein Objekt.
  • Variablennamen beginnen zwar manchmal mit $ oder @, dadurch wird aber nicht der Typ gekennzeichnet, sondern ihr Sichtbarkeitsbereich ($ für globale Variablen, @ für Instanzvariablen und @@ für Klassenvariablen).
  • Array-Literale verwenden eckige Klammern, nicht runde.
  • Listen, die aus anderen Listen zusammengesetzt werden, ergeben keine große Liste aller Elemente. Stattdessen erhält man eine mehrdimensionale Liste.
  • Es wird def anstelle von sub geschrieben.
  • Semikolons am Zeilenende sind überflüssig. Methodendefinitionen, Klassendefinitionen, Case-Anweisungen und ähnliches werden mit dem Schlüsselwort end abgeschlossen.
  • Objekte sind stark typisiert. Typumwandlungen müssen von Hand vorgenommen werden, zum Beispiel mit foo.to_i, foo.to_s, usw.
  • Es gibt kein eq, ne, lt, gt, ge oder le.
  • Es gibt keinen Diamantoperator (<>), üblicherweise wird stattdessen IO.some_method geschrieben.
  • => wird nur für Hash-Literale verwendet.
  • Es gibt kein undef. In Ruby gibt es nil. nil ist ein Objekt (wie alles andere in Ruby auch) und ist nicht dasselbe wie eine nicht definierte Variable. In booleschen Ausdrücken wird es als false interpretiert.
  • In booleschen Ausdrücken werden nur false und nil als falsch interpretiert. Alles andere ist wahr (einschließlich 0, 0.0 und "0").
  • Es gibt kein PerlMonks. Hilfe kann man dafür aber in der Ruby-Talk-Mailingliste finden.