O Perl é espectacular. ? Os Perl docs ? são espetaculares. A Comunidade de Perl é ... espectacular. Contudo, a linguagem é bastante extensa e questionavelmente complexa. Para aqueles programadores de Perl que anseiam por tempos mais simples, por uma linguagem mais ortogonal e elegante com orientação aos objectos nativa, então o Ruby pode ser a solução.
Semelhanças
Tal como no Perl, em Ruby,...- Existe um sistema de gestão de pacotes, semelhante ao CPAN (chamado RubyGems)
- O Tratamento de Expressões Regulares (Regexes) está embebido na linguagem. Bon appétit!
- Existe um número bastante razoável de funcionalidades nativas de uso frequente.
- Os Parênteses são frequentemente opcionais.
- As Strings funcionam essencialmente da mesma forma.
- Existe uma sitaxe de delimitação de strings e expressões regulares geralmente utilizada semelhante a do Perl
(com o formato
%q{este (pelicas)}, ou%Q{este (aspas)}, e%w{este para uma lista de palavras com pelicas}. Podem%Q|ser |%Q(utilizados)%Q^outros^delimitadores). - Em Ruby existe interpolação de váriaveis entre aspas,
"aplica-se #{desta} forma"(o código ruby é colocado entre#{}). - A execução de comandos de sistema através da Shell faz-se com `backticks`.
- O Ruby possui ferramentas de documentação embebidas (No Ruby’s é chamdo Rdoc).
Diferenças
Ao contrario do Perl, no Ruby…
- Não existem as regras dependentes do contexto como no Perl.
- Uma variável não é o mesmo que o objecto ao qual se refere. Em vez disso é sempre um referencia para um objecto.
- Apesar de
$e @ serem utilizados por vezes como os primeiros caracteres nos nomes das variaveis, em vez de indicar o tipo, indicam o ambito$para variáveis globais, @ para instancias de objectos, e @@ para atributos de classe). - Os elementos de um Array são colocados entre parênteses rectos em vez de parênteses curvos.
- Criar listas de listas não as reduz a uma grande lista, em vez disso obtem-se um array de arrays.
- Utiliza-se
defem vez desub. - Não são necessários ponto e vírgula (;) no final de cada linha. As definições de funçoes, classes e
estruturas case terminam com a palavra
end - Os objectos têm tipagem forte. É necessário invocar manualmente os métodos
foo.to_i,foo.to_s, etc., se for necessário converter entre tipos. - Não existem
eq,ne,lt,gt,ge, nemle. - Não existe ‘diamond operator’. Usualmente utiliza-se IO.alguma_funçao.
- O Simbolo (=>) é utilizado somente para os elementos de uma tabelas de hash.
- Não existe
undef. Em Ruby utiliza-se a expressãonil.nilé um objecto (tal como tudo o resto em Ruby). Não é o mesmo que uma variavel indefinida. Toma sempre o valorfalsese for tratada como um booleano. - Quando é feito um teste booleano, somente
falseenildevolvem um valor falso. Tudo o resto é verdadeiro (incluindo0,0.0, and"0"). - Não há um PerlMonks. Embora a mailing list do ruby-talk seja um sitio muito amigável. E temos também o wiki e a faq.
