Comprando o Ruby com outras linguagens:

Ruby X Java:
Semelhanças:
A memoria é gerida automaticamente através de um garbage collector.
Os Objectos são fortemente tipados.
Existem métodos públicos, privados e protegidos.
Existem ferramentas de documentação embebidas (a de Ruby chama-se RDoc). A documentação gerada pelo RDoc tem um aspecto muito parecido aquela gerada pelo Javadoc.
Diferenças:
Não necessita a compilação do  código-fonte, pois este é executado diretamente.
Existem vários conjuntos de ferramentas de desenvolvimento com interface gráfica (GUI). Os utilizadores de Ruby podem experimentar WxRuby, FXRuby, Ruby-GNOME2, ou o biblioteca nativa Ruby Tk, por exemplo.
Utiliza-se a palavra-chave end para terminar a definição de uma classe em vez de se colocar parentesis á volta de blocos de código.
Não existe declaração de tipo de dados, estes são associados a novos nomes de variáveis conforme se necessite (por exemplo a = [1,2,3] em vez de int[] a = {1,2,3};).
Não existe transformação de tipos de dados (casting). Basta chamar os métodos. Os seus testes unitários deverão avisa-lo se existe uma excepção antes da execução do código.
Temos “mixin’s” em vez de interfaces.
O uso de YAML é favorecido em relação ao XML.


Ruby X Perl
Semelhanças:
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 #{}).
Diferenças:
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 def em vez de sub.
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 .

Ryby X Python
Semelhanças:
Há um prompt interactivo (chamado irb).
Pode ler documentos na linha de comandos (com o comando ri em vez do pydoc).
Não há terminadores de linha especiais (excepto a usual nova linha).
Texto escrito literalmente pode ocupar várias linhas assim como o texto com triplas aspas em Python.
Parênteses rectos são para as listas, e parênteses são para dicionários (que, em Ruby, são chamados “hashes”)
Arrays funcionam da mesma maneira (adicionando-os entre sí, faz um array maior, mas compondo-os desta forma a3 = [ a1, a2] dá-nos um array de arrays).
Os objectos são fortemente e dinâmicamente tipados.
Tudo é um objecto, e variáveis são apenas referências a objectos.
Contudo as palavras chave são um pouco diferentes, as excepções trabalham da mesma forma.
Tem ainda ferramentas de documentação embebida (é chamado rdoc em Ruby).
Diferenças:
As strings são mutáveis.
Pode criar constantes (variáveis as quais o valor não pretende mudar).
Há algumas “case-conversions” forçadas (ex. nomes de classes começam com uma maiúsculas, variáveis começam com uma letra minúscula).
Há apenas um tipo de “list container” (um Array), e é mutável.
Texto em aspas permitem sequências de escape (tipo \t) e sintaxe especial “expressões de substituição” (as quais permitem inserir o resultado das expressões em Ruby directamente numa outra string sem ter de adicionar "add " + "strings " + "together"). Texto em pelicas são como r"raw strings" em Python.
Não há algo como classes de “novo estilo” e “antigo estilo”. Só um tipo.
Nunca há acessos directos aos atributos. Com Ruby, são tudo chamadas a métodos.
Os parênteses são opcionais para as chamadas a métodos.
Há o public, private, e protected para forçar o acesso, ao invés do Python _voluntary_ underscore __convention__.
“mixin’s” são utilizados ao invés das múltiplas heranças.
Pode re-abrir classes em qualquer momento e adicionar mais métodos.
Tem o true false em vez de True e False (e nil em vez de None).
Assim que testado para verdadeiro, só o false e o nil avaliam para um valor falso. Tudo o resto é verdadeiro (incluindo 0, 0.0, "", e []),

É elsif em vez de elif.

 

Fonte: http://www.elomarns.com/blog/?p=8