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 вполне может помочь.