Перехід на Ruby з Perl

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

Подібності

Як і в Perl, у Ruby…

  • Є система керування пакетами, схожа на CPAN (хоча вона називається RubyGems).
  • Регулярні вирази вбудовані. 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. Втім, поштова розсилка ruby-talk — дуже корисне місце.