Da Perl a Ruby

Perl è superbo; la documentazione Perl è superba; la comunità Perl è … superba. Tuttavia, il linguaggio è piuttosto esteso, e con una certa complessità. Per quei programmatori Perl che aspirano a un’esperienza di programmazione più semplice, a un linguaggio più cartesiano, e con eleganti funzionalità OO presenti dall’inizio nel linguaggio stesso, Ruby può essere la risposta che essi cercano.

Somiglianze

Come in Perl, in Ruby…

  • Hai un sistema di amministrazione package, simile a CPAN (che si chiama “RubyGems”).
  • Le “Regular Expressions” sono construite nel linguaggio (buon appetito!).
  • C’è un buon numero di operazioni comuni fornite dal linguaggio stesso.
  • Le Parentesi sono spesso opzionali.
  • Le Stringhe funzionano sostanzialmente nello stesso modo.
  • Esiste una sintassi generale per delimitare le stringhe e le regex simile a Perl (ossia come %q{questo} (fra apici), o %Q{questo} (fra virgolette), e %w{questo per una lista di parole fra apici}. Tu %Q|puoi| %Q(usare) %Q^altri^ delimitatori se preferisci).
  • Si Ritrova l’interpolazione di variabili nelle stringhe fra virgolette, anche se "appare #{così}.." (bada che puoi inserire qualsiasi codice Ruby all’interno di #{}, non solo variabili).
  • I comandi Shell vengono racchiusi `da apici sghembi` (“backticks” in Inglese).
  • Hai tool di documentazione embedded (quello di Ruby si chiama rdoc).

Differenze

A differenza di Perl, in Ruby,…

  • Non hai regole che dipendono dal contesto come in Perl.
  • Una variabile non è la stessa cosa dell’oggetto al quale fa riferimento. Invece, è solamente un riferimento a un oggetto.
  • Benchè i simboli $ e @ vengano usati (in casi specifici) come primo carattere in nomi di variabili, invece di indicarne il tipo, ne indicano la portata (“scope”) (più precisamente: $ per le globali, @ per le instanze di oggetti, e @@ per le variabili di classe).
  • Gli elementi di un Array sono racchiusi da parentesi quadre invece che fra parentesi.
  • Comporre liste di altre liste non le riducono ad una sola grande lista; invece il risultato è un array di array.
  • Si usa def invece di sub.
  • Non sono necessari i punti e virgola alla fine di ciascuna linea. Per inciso, le definizioni di funzione, le definizioni di classe, e le istruzioni ‘case’ vengono chiusi dalla parola-chiave end.
  • Gli oggetti sono fortemente tipizzati. Devi esplicitamente scrivere foo.to_i, foo.to_s, etc., se devi fare conversioni di tipo (il linguaggio non lo farà per te).
  • Non ci sono eq, ne, lt, gt, ge, le.
  • Non c’è l’operatore diamante (<>) per l’entrata-uscita dati; invece di solito si usa IO.qualche_funzione.
  • Il simbolo => (“fat comma”) viene usato solamente per segnalare la corrispondenza chiave-valore nei hash.
  • Non esiste undef; in Ruby esiste solo nil, il quale è un oggetto (come d’altronde tutto in Ruby). Questo oggetto non è la stessa cosa di una variabile indefinita; è un oggetto che esiste, ma che ha il valore false quando lo valuti come boolean.
  • Quando testi se un’espressione è ‘vera’, solamente false e nil rendono un valore falso. Tutto il resto è vero (includendo 0, 0.0, e "0").
  • Non ci sono PerlMonks. Tuttavia la mailing list ruby-talk è di grande aiuto.