Вивчаємо perl, частина 1, програмування, статті, бібліотека Лінуксцентра, - експерт по linux і

Вивчаємо Perl, частина 1

Як і всі сучасні мови програмування, Перл є об'єктно-орієнтованим. Також можливо мережеве програмування (наприклад, програмування сокетів). Програми на Перлі легко портируют (добре написаний скрипт буде працювати на Linux, BSD, Solaris, DOS, Win9x, NT, MacOS, OS / 2, AmigaOS, VMS і інших платформах без необхідності модифікації вихідного коду).

Не важливо, як довго ви користуєтеся Лінукс - напевно ви вже чули про Перлі; навіть можливо, що ви запускали величезна кількість скриптів, при цьому не підозрюючи про це. Програми типу inews, mirror, debconf, majordomo, sirc і багато інших написані на Перлі і тільки на Перлі. Якщо ви користуєтеся дистрибутивом Debian, "нацькували" zgrep на файл Packages.gz - виявиться, що 382 пакета залежать від Перла (це означає, що основна частина пакета написана на Перлі), і для роботи 28 інших пакетів рекомендується мати Перл.

Для чого Перл хороший?

Перл чудовий в обробці тексту, а також для інтегрування в єдине ціле різних речей. Адже для мови сценаріїв (скриптів) - всі ці різні речі є по суті одним і тим же.
--John Ousterhout, творець мови сценаріїв Tcl.

Як і всі сучасні мови програмування, Перл є об'єктно-орієнтованим. Також можливо мережеве програмування (наприклад, програмування сокетів). Програми на Перлі легко портируют (добре написаний скрипт буде працювати на Linux, BSD, Solaris, DOS, Win9x, NT, MacOS, OS / 2, AmigaOS, VMS і інших платформах без необхідності модифікації вихідного коду). Програми швидкі в налагодженні, так як не вимагають компіляції - ви просто змінює код і запускаєте скрипт. Існує величезна кількість додаткових модулів (реалізації стандартних рішень), які дозволять виконувати будь-яке завдання. Також є Comprehensive Perl Archive Network (CPAN) - краще про що може мріяти Perl-програміст.

Так. Вражає. Але в чому суть Перла?

Гарне питання. Сподіваюся, що приблизно через рік після початку програмування на Перлі ви самі зможете дати мені відповідь на це питання. Опис чого б то не було - це завжди приміщення об'єкта в певні рамки. закриття його в своєрідному понятійному ящику. Я до сих пір намагаюся знайти такий, куди Перл помістився повністю (добре б ще знайти такий з надійним замком).

Що не слід писати на Перлі?

Хм. Особисто я не став би писати текстовий процесор з графічним інтерфейсом, комп'ютерні іграшки, графічний браузер. Ні, звичайно, можна на Перлі створювати красиві інтерфейси, але мені все-таки здається, що існують більш відповідні для таких цілей мови. Як попередження початківцям програміста зауважу: "для людини з молотком будь-яка проблема здається цвяхом".

Також зауважте, що сам Перл написаний аж ніяк не на Перлі, так само як і ядро ​​Лінукс. Давайте залишимо низкоуровневое програмування C / C ++ і Assembler'у. Кредом кожного програміста повинна бути фраза: "Певні інструменти для певних завдань".

Останнє попередження перед стартом.

Якщо ви вже трохи знайомі з Перлом і бачите, що мій спосіб викладу і рішення відрізняються від вже вивчених вами, просто запам'ятайте девіз Перла: "Існує більше одного способу для вирішення проблеми" (There's More Than One Way To Do It або TMTOWDI [читається як 'tim-today']). В цьому суть філоофіі Перла. Зрозуміло, виправлення очевидних помилок в моєму тексті тільки вітається.

Ті з вас, хто читав мою попередню серію статей, присвячених програмуванню Shell, пам'ятають, що скрипт починається з так званої "hash-bang" (знак решітки # і знак оклику!) Або "shebang" рядки:

Це потрібно для того, щоб shell породив суб-shell, де буде виконуватися ваш код. Те ж саме потрібно і для Перла:

Рядок може варіюватися в залежності від того, де у вас розташований інтерпретатор Перл.

Запам'ятайте вимоги, які повинні виконуватися hash-bang рядком:
  1. Вона повинна бути першою в скрипті
  2. Решітка # повинна бути першим символом на рядку. Прогалини між # та. не допускаються.
  3. Потрібно вказувати повний шлях, а не тільки ім'я запускається файлу.

Ну що ж. Давайте спробуємо написати наш перший скрипт на Перлі:

#! / Usr / bin / perl
# "Goodbye" - сучасна і ультра-депресивна заміна "Hello World"


print "Прощай, жорстокий світ! \ n";

unlink $ 0;

О, до речі. Трохи про те, як писати код.

Я особисто далекий від досконалості в написанні коду: раніше я часто писав такі програми, які пишуться і більше не читаються, так як їх неможливо зрозуміти. Але я постійно вдосконалююсь і намагаюся виправитися.

Перл сприймає так званий "порожнечі" - табуляцію і прогалини - так, як вони цього заслуговують - тобто ігнорує. У зв'язку з цим, ви можете структурувати код так, як ви вважаєте за потрібне для донесення стороннім особами сенсу вашої програми. наприклад:

@boats = ( "Aloa", "Cheoy Lee", "Pearson", "Mason", "Swan", "Westsail", "S2", "Petersen", "Hereshoff"); # Список човнів

Таким чином, ми здійснили процес наповнення масиву '@boats' назвами човнів. Непогано, але можна зробити те ж саме, але в більш гуманної формі:

Таке уявлення тесту програми не є прерогативою Перла - більшість сучасних мов дозволяють використовувати додаткові "порожнечі", щоб зробити текст більш легким для читання. У цій серії статей, я постараюся хоча б показати, що значить хороший стиль програмування (з моєї точки зору) і мені хотілося б, що б кожен прийняв цей аспект до відома.

В Перлі все підпорядковується принципу простоти використання. Перл - це так званий "ліберальний" мову, де, наприклад, ви не зможете, визначити змінну як ту, яка може приймати виключно значення в межах масиву 32-бітних позитивних чисел з плаваючою комою.

В Перлі існує 3 типи змінних: скаляр, масив і хеш. Незважаючи на ці страшні назви, все насправді досить просто: це просто змінні, які зберігають дані, використовуючи різну структуру.

змінні типу "масив" - послідовно нумеровані списки скалярів
    Позначається символом "@" (@v, @list, @variable). наприклад:
змінні типу "хеш" - індексовані списки скалярів
    Хеши позначаються символом "%" (% people,% x,% this_is_a_hash). наприклад:

Зверніть увагу на те, що дані в масиві зберігаються в порядку, визначеному номером елемента масиву, а в хешах - немає: звернення до першого елементу хеша зовсім не має на увазі звернення до елементу, який ви першим помістили в цей хеш. Звернення до елементів хеша здійснюється за допомогою індексів, а не їх становищем.

Використовуючи ці три типи змінних, ви зможете зберігати будь-які дані (і звертатися до них) - причому все це просто.

Беручи до уваги те, що змінні можуть містити в собі дані різних типів (числа і рядки), для операцій з цими змінними потрібні різні оператори

Щоб запам'ятати, користуйтеся правилом: порівнюючи літери (рядки), використовуємо літери.

Так як я люблю давати конкретні приклади, ось вам рецепт як посивіти і отримати нервовий зрив:

Гм. Програма каже, що немає ніякої різниці. Це, звичайно, може відображати політичну ситуацію в країні, але як на рахунок наших порівнянь. так Так. Звичайно. Нам потрібно було використовувати рядкові оператори порівняння.

Ось тепер оператори порівняння працюють як потрібно (ага, а політична логіка відпочиває. Але я починаю йти від теми).

До речі, чому в першому прикладі Перл вирішив, що "Al" і "George" - це одне і теж? З яких це пір програми стали розбиратися в політиці?

Причина, по суті, важлива, так як мова йде про те, як Перл розрізняє "істина" (true) і "брехня" (false). З огляду на, що всілякі перевірки - "if", "while", "until" і ін. Залежать від цього принципу розрізнення, нам важливо зрозуміти його.
  • "0" - це завжди "брехню" (в незалежності від того, чи є значення змінної рядком або числом)
  • Всі невизначені змінні (ті, яким не присвоєно ніякого значення) - "брехня".
  • Порожні рядки - "" або "" - "брехня".
  • Все інше - "істина".

А тепер спробуйте розібратися з цими хлопцями - істина або брехня?

Відповідь - в кінці статті.

Іншим важливим моментом є інтерполяція змінних, то принцип, за яким визначається інтерпретувати чи ні вираз, укладену в лапки. наприклад:

Оп-с. Що ми отримали?

Нашу корову звуть $ name.

Особисто мені не здається, що корова, яка дійсно поважає себе, відгукнулася б на таке ім'я - $ name (Я навіть не кажу про те, як важко було б вимовляти таке ім'я). Так як же нам все-таки зробити так, щоб корова відгукнулася?

Усе! Тепер корова - наша! (Ті з вас, хто подумав, що щось недобре - негайно припиняйте). І все завдяки Перлу. Я ж казав, що з Перлом ви зможете робити все.

А що, якби ми захотіли вивести ім'я змінної? Немає проблем. В Перлі це вирішується просто:

Можна вивести будь метасимвол (тобто будь-який, зарезервований в Перлі), якщо перед ними ставити зворотну похилу риску ( ""). Погляньте на це:

Вибирайте, що більше до душі. Головне, зрозуміти різницю. Зверніть увагу на те, що різні значення у виразі "print" розділяються комою, якби коми не було, то вираз отримав зовсім інше значення, але про це наступного разу.

Перед тим, як закінчити цю статтю, я хотів би вам дати ще один важливий рада. Завжди в першому рядку вашого скрипта використовуйте параметр "-w":

Це дозволить активізувати виведення повідомлень про проблеми, що виникли при інтерпретації скрипта. Поки ви ви новачок - обов'язково використовуйте цей параметр, а для експертів - це подвійно обов'язково. Помилки не зникають з досвідом - вони просто розумнішають :)

У цей раз ми зробили невелику прогулянку в світ програмування на Перлі. В наступному місяці, ми зайдемо трохи подалі. Можливо, нам належить досліджувати масиви і хеши. або в перший раз зануритися в океан фантастичних можливостей "регулярних виразів" Перла (regexes або regular expressions). Моя порада - спробуйте на ділі те, що ми з вами вивчили, поекспериментуйте - зі свого досвіду я знаю, що це кращий спосіб вивчення мови - експериментувати до тих пір, поки не буде досягнута межа можливостей при ваших сьогоднішніх знаннях, а потім покликати на допомогу кого-небудь, хто знає більше. Запам'ятайте, ви ніколи не отримаєте хороших відповідей, якщо не будете знати питань.

Удачі в експериментах з Перлом!

Відповідь на питання: Всі рівні "істина". Жодне з виразів не задовольняє вимогам "помилкових" значень. "00" - це не "0", як і "-1". Пропуск "" - це не порожній рядок "", а "5 - 5", якщо цей вислів не прирівняне до чого-небудь, то воно не дорівнює 0.

Посилання: "Perl. The Complete Reference", Martin C. Brown

Схожі статті