В Ruby из Perl

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