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
defanstelle vonsubgeschrieben. - Semikolons am Zeilenende sind überflüssig.
Methodendefinitionen, Klassendefinitionen, Case-Anweisungen
und ähnliches werden mit dem Schlüsselwort
endabgeschlossen. - 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,geoderle. - Es gibt keinen Diamantoperator (
<>), üblicherweise wird stattdessenIO.some_methodgeschrieben. =>wird nur für Hash-Literale verwendet.- Es gibt kein
undef. In Ruby gibt esnil.nilist ein Objekt (wie alles andere in Ruby auch) und ist nicht dasselbe wie eine nicht definierte Variable. In booleschen Ausdrücken wird es alsfalseinterpretiert. - In booleschen Ausdrücken werden nur
falseundnilals falsch interpretiert. Alles andere ist wahr (einschließlich0,0.0und"0"). - Es gibt kein PerlMonks. Hilfe kann man dafür aber in der Ruby-Talk-Mailingliste finden.