Перехід на 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 — дуже корисне місце.