Von Ruby nach Perl

Perl ist großartig. Perls Doku ist großartig. Die Perl-Community ist … großartig. Für jene Perler, die sich von Anfang an elegante OO-Features wünschen, könnte Ruby etwas für Sie sein.

Ähnlichkeiten

Wie bei Perl, in Ruby,…

  • Sie haben ein Paketverwaltungssystem, ähnlich wie CPAN (obwohl es RubyGems heißt).
  • Regex sind eingebaut. Guten Appetit!
  • Es gibt eine ziemlich große Anzahl von häufig verwendeten Built-ins.
  • Klammern sind oft optional.
  • Strings funktionieren im Grunde gleich.
  • Es gibt eine allgemeine Syntax für Zeichenketten und Regex-Quoting, ähnlich wie bei Perl. Sie sieht aus wie %q{dies} (einfach Anführungszeichen) oder %Q{dies} (doppelte Anführungszeichen) und %w{dies für eine Liste von Wörtern mit einfachen Anführungszeichen}. Sie können %Q|verwenden| %Q(andere) %Q^Begrenzer^, wenn Sie möchten.
  • Sie haben doppelte Anführungszeichen für Variableninterpolation, obwohl sie "so #{wie} das aussieht" (und Sie können jeden beliebigen Ruby-Code in dieses #{} einfügen).
  • Shell-Befehlserweiterung verwendet `Backticks`.
  • Sie haben eingebettete Doku-Tools (Rubys heißt rdoc).

Unterschiede

Im Gegensatz zu Perl, in Ruby,…

  • Sie haben nicht die kontextabhängigen Regeln wie bei Perl.
  • Eine Variable ist nicht dasselbe wie das Objekt, auf das sie verweist. Stattdessen ist sie immer nur ein Verweis auf ein Objekt.
  • Obwohl $ und @ manchmal als erstes Zeichen in Variablennamen verwendet werden, anstatt den Typ anzugeben, geben sie den Geltungsbereich an ($ für Globale, @ für Objektinstanzen und @@ für Klassenattribute).
  • Array-Literale werden in Klammern statt in runden Klammern gesetzt.
  • Das Zusammensetzen von Listen aus anderen Listen ergibt keine einzige große Liste. Stattdessen erhalten Sie ein Array von Arrays.
  • Es ist def statt sub.
  • Am Ende jeder Zeile sind keine Semikolons erforderlich. Übrigens beenden Sie Dinge wie Funktionsdefinitionen, Klassendefinitionen und Case-Anweisungen mit dem Schlüsselwort end.
  • Objekte sind stark typisiert. Sie werden manuell foo.to_i, foo.to_s usw. aufrufen, wenn Sie zwischen Typen konvertieren müssen.
  • Es gibt kein eq, ne, lt, gt, ge oder le.
  • Es gibt keinen Diamond-Operator (<>). Sie verwenden normalerweise stattdessen IO.some_method.
  • Das fette Komma => wird nur für Hash-Literale verwendet.
  • Es gibt kein undef. In Ruby haben Sie nil. nil ist ein Objekt (wie alles andere in Ruby). Es ist keine undefinierte Variable. Es wird zu false ausgewertet, wenn Sie es wie einen booleschen Wert behandeln.
  • Wenn auf Wahrheit getestet wird, nur false und nil werten zu einem falschen Wert aus. Alles andere ist wahr (einschließlich 0, 0.0 und "0").
  • Es gibt kein PerlMonks. Die ruby-talk Mailingliste ist jedoch ein sehr hilfreicher Ort.