Perl прекрасен. Документация Perl’а прекрасна. Коммьюнити Perl …прекрасно. Однако, сам язык довольно обширен и сложен. Ruby подойдет тем пользователям Perl, которые хотели бы более простого временами, более ортогонального языка с объектно-ориентированной парадигмой, вписанной в язык с рождения.
Сходства
Как и в Perl, в Ruby…
- имеется система пакетов, похожая на CPAN, называемая RubyGems.
- настоящие, вкусные регулярные выражения, приятного аппетита!
- большое количество широко используемых встроенных инструментов.
- скобки зачастую необязательны.
- строки работают практически также.
- квотирование строк и регулярных выражений похожее (например
%q{одинарные кавычки}
, или%Q{двойные кавычки}
,%w{или такой список слов в одинарных кавычках}
. Можно%Q|использовать|
%Q(другие)
%Q^символы^
. - строки в двойных кавычках интерполируются, хотя это
"выглядит #{вот} так"
(в#{}
может быть любой Ruby код). - для вызова команды оболочки используются
`обратные кавычки`
. - есть встроенное средство документации (rdoc).
Отличия
В Ruby в отличие от Perl…
- нет контекстно-зависимых правил.
- переменная и объект, на который она ссылается - не одно и то же, это всегда просто ссылка.
- хотя
$
и@
используются в именах переменных в качестве первого символа, они обозначают не тип, а область видимости ($
для глобальных,@
- для переменных объекта, а@@
- для переменных класса). - массив заключается в
[]
, а не()
. - сочетание массивов не приводит к их сложению в один массив, а возвращает массив массивов.
- вместо
sub
пишетсяdef
. - нет необходимости в точке в запятой в конце строки - определения функций, классов
и ветвления заканчиваются ключевым словом
end
. - объекты строго типизированы - надо руками вызывать
foo.to_i
,foo.to_s
и т.д., если надо преобразовывать типы. - нет
eq
,ne
,lt
,gt
,le
. - нет
<>
(“diamond operator”) - используетсяIO.some_method
. =>
(“fat comma”) используется только в определениях хешей.- нет
undef
- естьnil
и это объект (как и все в Ruby), но присвоить переменной значениеnil
- не значит “уничтожить” ее. - в тестах на истинность только
false
иnil
- это ложь. Все остальное (включая0
,0.0
и"0"
) - истина. - нет эквивалента PerlMonks. Однако, список рассылки ruby-talk вполне может помочь.