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 vonsub
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
oderle
. - Es gibt keinen Diamantoperator (
<>
), üblicherweise wird stattdessenIO.some_method
geschrieben. =>
wird nur für Hash-Literale verwendet.- Es gibt kein
undef
. In Ruby gibt esnil
.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 alsfalse
interpretiert. - In booleschen Ausdrücken werden nur
false
undnil
als falsch interpretiert. Alles andere ist wahr (einschließlich0
,0.0
und"0"
). - Es gibt kein PerlMonks. Hilfe kann man dafür aber in der Ruby-Talk-Mailingliste finden.