Perl — чудовий. Документація Perl — чудова. Спільнота Perl — … чудова.
Для тих, хто хоче елегантні ООП-можливості, вбудовані з самого початку,
Ruby може підійти.

### Подібності

Як і в Perl, у Ruby...

* Є система керування пакетами, схожа на CPAN (хоча вона називається
  [RubyGems][1]).
* Регулярні вирази вбудовані. Bon appétit!
* Є чимало часто використовуваних вбудованих можливостей.
* Дужки часто необов’язкові.
* Рядки працюють приблизно так само.
* Є загальний синтаксис обмежених рядків і регулярних виразів, схожий
  на Perl. Він виглядає як `%q{this}` (одинарні лапки), або
  `%Q{this}` (подвійні лапки), і `%w{this for a single-quoted list of words}`.
  За бажання ви можете використовувати `%Q|can|` `%Q(use)` `%Q^other^`
  як роздільники.
* Є інтерполяція змінних у стилі подвійних лапок, хоча вона
  `"виглядає #{так}"` (і ви можете вставляти будь-який код Ruby всередині
  `#{}`).
* Розгортання shell-команд використовує `` `бектики` ``.
* Є вбудовані інструменти документації (у Ruby це rdoc).

### Відмінності

На відміну від Perl, у Ruby...

* Немає правил, що залежать від контексту, як у Perl.
* Змінна — не те саме, що об’єкт, на який вона посилається. Замість цього
  це завжди лише посилання на об’єкт.
* Хоча `$` і `@` інколи використовуються як перший символ у назві змінної,
  вони позначають не тип, а область видимості (`$` для глобальних, `@` для
  екземпляра об’єкта, `@@` для атрибутів класу).
* Літерали масивів беруться в квадратні дужки, а не в круглі.
* Списки списків не «сплющуються» в один великий список. Натомість ви
  отримуєте масив масивів.
* Це `def` замість `sub`.
* Не потрібні крапки з комою в кінці рядків. До речі, такі конструкції,
  як визначення функцій, визначення класів і case-вирази, завершуються
  ключовим словом `end`.
* Об’єкти мають строгі типи. Якщо потрібно перетворити тип, ви будете
  вручну викликати `foo.to_i`, `foo.to_s` тощо.
* Немає `eq`, `ne`, `lt`, `gt`, `ge` чи `le`.
* Немає ромбового оператора (`<>`). Зазвичай використовується
  `IO.some_method`.
* “Жирна кома” `=>` використовується лише для літералів hash.
* Немає `undef`. У Ruby є `nil`. `nil` — це об’єкт (як і все інше в Ruby).
  Це не те саме, що невизначена змінна. Він оцінюється як `false`, якщо
  трактувати його як булеве значення.
* При перевірці на істинність лише `false` і `nil` дають хибне значення.
  Усе інше є істинним (включно з `0`, `0.0` і `"0"`).
* Немає [PerlMonks][2]. Втім, поштова розсилка ruby-talk — дуже корисне
  місце.



[1]: http://guides.rubygems.org
[2]: http://www.perlmonks.org/
