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 disub
. - 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 usaIO.qualche_funzione
. - Il simbolo
=>
(“fat comma”) viene usato solamente per segnalare la corrispondenza chiave-valore nei hash. - Non esiste
undef
; in Ruby esiste solonil
, 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 valorefalse
quando lo valuti come boolean. - Quando testi se un’espressione è ‘vera’, solamente
false
enil
rendono un valore falso. Tutto il resto è vero (includendo0
,0.0
, e"0"
). - Non ci sono PerlMonks. Tuttavia la mailing list ruby-talk è di grande aiuto.