Загальний огляд та порівняльний аналіз мов ОПП. Мова програмування Perl

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

 

 

 

 

 

 

 

 

 

СЕМІНАР

На тему:Загальний огляд та порівняльний аналіз мов ОПП. Мова програмування  Perl.

 

 

 

 

 

 

 

 

 

 

 

 

:

 

 

 

 

 

 

 

 

2014

ЗМІСТ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.Історія розвитку  Perl 

 

Perl-високорівнева, динамічна мова програмування загального призначення. Perl було розроблено у 1987 році Ларі Уоллом, лінгвістом і програмістом за освітою, який у той час працював системним адміністратором у NASA.

Ларрі Волл розпочав роботу над Perl у 1987 році, коли працював програмістом у компанії Unisys, 18 грудня того ж року, у списку поштової розсилки comp.sources.misc від повідомив про вихід версії 1.0. Наступні два роки мова дуже стрімко розвивалась, і вже наступного року було випущено версію 2.0, основним нововведенням якої була покращена робота з регулярними виразами. Perl 3 вийшла у 1989 році, у ній було додано підтримку двійкових потоків даних.

Спершу документація по Perl являла собою усього лиш одну сторінку підручника man. У 1991 році було опубліковано книгу Programming Perl (відома багатьом програмістам під іменем «Camel Book»), яка невдовзі стала, де-факто, стандартним посібником по мові Perl. Разом з цим, було випущено Perl версії 4.0, до якої не додали жодних серйозних нововведень, лише нова документація.

Після цього слідувала серія випусків, що містили виключно виправлення знайдених помилок, яка завершилась у 1993 році виходом Perl версії 4.036. Після цього, Ларрі Волл закинув Perl 4, і розпочав роботу над Perl 5.

Початковий етап роботи над дизайном Perl 5 було завершено у 1994 році. Того ж року, для координації роботи по портуванню Perl 5 на різні платформи, було відкрито список поштової розсилки The perl5-porters.

Perl 5 було випущено 17 жовтня 1994 року. У цій версії було повністю переписано інтерпретатор, а до самої мови було додано багато нових можливостей, включно з об'єктами, лексичними (my) змінними, і підтримкою модулів. Модулі являли собою механізм розширення мови без змін інтерпретатора. Це дозволило з часом стабілізувати код інтерпретатора, а стороннім розробникам працювати над розширенням можливостей мови.

На сьогодні, Perl 5 й досі підтримується, і є основною гілкою мови. Пізніше до неї було додано багато нових можливостей, як то підтримка Unicode, потоків, покращено підтримку об'єктно-орієнтованого програмування, та багато іншого.

18 грудня 2007 року, рівно через 20 років після виходу Perl 1.0, було повідомлено про вихід Perl 5.10.0. До нього увійшло багато нових нововведень, які наблизили мову за своїми можливостями до Perl 6, серед них, перемикач станів (який іменують «given/when»), покращення підтримки регулярних виразів, оператор ~~, та чимало іншого.

Однієї із найважливіших подій в історії Perl 5 було додання підтримки модулів. 26 жовтня 1995 року, було відкрито Comprehensive Perl Archive Network (CPAN), яка стала репозиторієм модулів для Perl. На травень 2010, репозиторій містить понад 17,750 модулів понад 8,000 авторів. CPAN широко розглядається як одна з найбільших практичних переваг Perl.

Perl спершу мав назву «Pearl», на честь притчі про перли з Євангеліє від Матвія. Ларрі Волл шукав для мови коротку назву з можливими конотаціями; він стверджує, що перебрав (і відкинув) усі три- і чотирибуквенні слова англійської мови. Він також у свій час планував дати мові ім'я Gloria, на честь своєї дружини. Волл довідався, що на момент виходу першої версії мови Perl, вже існувала мова PEARL, через що йому довелося змінити написання назви, не змінивши її вимови.

Говорячи про мову, назва, як правило, капіталізуються (Perl). Коли ж мова йде про інтерпретатор мови, назва декапіталізується (perl) оскільки Unix-подібні файлові системи є залежними від регістру. До виходу першого видання книги Programming Perl, назва мови писалася, як perl; Однак, Рональд Шварц (Randal L. Schwartz) написав її назву у своїй книзі з великої літери, мотивуючи це тим, що таким чином вона виглядає більш привабливо. Пізніше такий варіант прижився, і став, де-факто, стандартним. Інколи ім'я пишуть великими літерами «PERL», такий спосіб офіційною документацією зветься невірним, через що деякі члени спільноти називають йогонаписанням аутсайдерів.

 

 Не зважаючи на те, що Perl часто вважають акронімом для Practical Extraction and Report Language (який часто з'являється у документації), це насправді бекронім; деякі інші розшифровки згодом стали канонічними, наприклад, жарт Ларрі Волла Pathologically Eclectic Rubbish Lister. Однак, пан Волл стверджує, що така назва обрана для того, щоб надихнути програмістів до вигадання інших розшифровок даного акроніму.

 

2.Основні типи даних

 

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

Скалярні змінні використовуються для зберігання поодиноких значень. Вони можуть містити числа, рядки і посилання на інші об'єкти. Перед ім'ям скалярної змінної необхідно ставити знак долара '$'. Тип скалярної змінної не фіксований (на відміну від, наприклад, мови Сі) і визначається динамічно в залежності від контексту. Наприклад:

$x = 10; # число 
$y = $x + 1; # використовуємо $x число... 
$z = $x . 'string'; # ... а тепер - як рядок 
$ref = \$x; # $ref є покажчиком на $x 
$$ref=0; # $x містить значення 0

Масив є впорядкованим списком скаляров. Кожен елемент масиву має порядковий індекс, за допомогою якого до нього можна отримати доступ. Нумерація елементів починається з нуля, тобто перший елемент має індекс 0.

Перед ім'ям змінної-масиву необхідно ставити знак '@', а для доступу до певного елемента масиву рекомендується ставити знак '$', так як певний елемент масиву є скаляром . Багатовимірні масиви можна змоделювати, поміщаючи в список посилання на інші списки.

@array = (1,2,3,4); # записали в масив @array чотири елемента

print $array[2]; # надрукувати третій елемент

print @array[2]; # надрукувати третій елемент, але рекомендується використовувати попередню версію

Хеш-таблиця являє собою асоціативний масив, що дозволяє асоціювати рядок (звану ключ) з скаляром (значення). Рядок називається ключем, а скаляр в хеш-таблиці значенням. Перед ім'ям змінної-списку, необхідно ставити знак відсотка '%', а для доступу до певного елемента масиву рекомендується ставити знак '$'. Фізично Хеш-таблиця являє собою масив, де у непарних позиціях знаходяться ключі, а на парних - значення.

%hash = (

'cat' => 'kitten',

'dog' => 'puppy',

'cow' => 'calf'

);

print $hash{'cat'}; #Надрукує kitten

print %hash{'cat'}; #Також надрукує kitten, але рекомендується використовувати попередню версію

print join("-", keys %hash) ; # Виведення всіх ключів. Надрукує cat-dog-cow

print join("-", values %hash) ; # Виведення всіх значень. Надрукує kitten-puppy-calf

print join("-", %hash) ; #Надрукує cat kitten-cow-calf-dog puppy

Функція являє собою фрагмент коду, що виконується. Функція завжди повертає якесь значення або UNDEF. Якщо обчислене значення явно не вказано оператором return, повертається останнім обчислене значення.

sub printTwo

{print 2;

}sub three

{

3;

}

$s=\&three;

print &$s; #Надрукує 3

$s=\&printTwo;

print &$s; #Надрукує 21. `2` в коді функції, а `1` як значення, що повертається функцією printTwo

print &printTwo #Те ж саме

Константа являє собою незмінне значення. Використання:

use constant MY=>2;

print MY;

Файловий дескриптор

Являє собою вказівник на файл, пристрій або PIPE канал, відкриті для запису, читання або для запису і читання

Використання:

$s=; #Читаємо один рядок  з дескриптора STDIN (стандартний потік  вводу)

@values=; #Читаємо всі рядки з деякого відкритого і пов'язаного з дескриптором файлу FILE.

print STDOUT $s; #Друкуємо в STDOUT (стандартний потік виводу)

 

3.Оператори 

 

Оператори призначені в мові Perl, як і в інших мовах програмування, для виконання логічних операцій. Послідовність таких операцій залежить від пріоритетності операторів. Далі буде вестися опис операторів в послідовності їх пріоритетності.

Терми і оператори списку.

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

@ i = ( 'R ', 'L ', print 'P ', 'E ');

print "\n", @ i, "\n"; # виведе PE і RL

Аналогічно термів обробляються послідовності do{} eval{}.

Оператор "->" ("стрілка")

Є інфіксним оператором посилання. Якщо права частина є [...] або {...} подпрограммой, тоді ліва частина повинна бути символьним посиланням на масив або хеш. В іншому разі, якщо права частина - ім'я методу або скалярна змінна що містить ім'я методу, то ліва частина повинна бути об'єктом або ім'ям класу.

Оператори "++" і "--"

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

Приклад:

print ++($i = "z9") # отримаємо результат а0

print ++($i = "Z9") # отримаємо результат А0

 

Оператор зведення в ступінь ( ** )

У мові Perl подвійна зірочка "**" є експоненціальним оператором. Наведемо приклад:

print 3**3 # 27

print -3**3 # -27

Унарні оператори:

  1. ! - логічне заперечення
  2. - унарний мінус, при числовому значенні змінної означає звичайне арифметичне вычетание. Якщо операндом є ідентифікатор, то повертається рядок, що складається із знака мінус і ідентифікатора.
  3. + - унарний плюс, при числовому значенні змінної є арифметичним плюсом і вплив на рядки не має, але може застосовуватися для відділення ім'я функції від вираження укладеного у дужки, яке інакше розглядається як список аргументів.
  4. ~ - унарная тільда, покажчик побітового заперечення
  5. \ - отримання посилання на змінну, що стоїть за ним
  6. Оператори зв'язки "=~" та "!="

Оператор "=~" пов'язує ліву частину виразу з правого, яка є певним шаблоном. У випадку не зазначення даного оператора, за нього за замовчуванням буде діяти змінна $_ . Правий аргумент це зразок пошуку підстановки або трансляції, лівий аргумент - це те, що повинно бути підставлено замість $_ . Повертається величина показує успіх операції. Оператор " ! ~ " це теж саме, що і " = ~ ", тільки повертається величина є негативною в логічному сенсі ( НЕМАЄ).

Бінарні оператори:

  1. - множення чисел
  2. / - ділення чисел
  3. % - обчислення модуля двох чисел
  4. x - оператор повторень, в скалярному контексті праворуч від оператора число повторень, а зліва - рядок для повторення. У списковом контенті - елемент для повторення є список.

Наведемо приклади відповідно їх розгляду:print 'a' x '6'; # отримаємо 'aaaaaa'

print (0,9) x 5; # отримаємо 0909090909

  1. >> - виконує двійковий зрушення лівих аргументів вправо на кількість розрядів, зазначене в правих аргументах. Аргументи повинні бути цілочисельними.
  2. << - виконує двійковий зрушення лівих аргументів вліво на кількість розрядів, зазначене в правих аргументах. Аргументи повинні бути цілочисельними.

Оператори порівняння:

  1. < - повертає TRUE ( істина) якщо ліве значення чисельно менша, ніж праве
  2. lt - повертає TRUE якщо ліве значення (рядкове) менше, ніж праве
  3. - повертає TRUE якщо ліве значення чисельно більше, ніж праве
  4. gt - повертає TRUE якщо ліве значення (рядкове) більше , ніж праве
  5. <= - повертає TRUE якщо ліве значення чисельно менше або дорівнює, ніж праве
  6. le - повертає TRUE якщо ліве значення (рядкове) менше або дорівнює , ніж праве
  7. >= - повертає TRUE якщо ліве значення чисельно більше або дорівнює , ніж праве
  8. ge - повертає TRUE якщо ліве значення (рядкове) більше або дорівнює , ніж праве

Оператори рівності:

  1. == - повертає TRUE( істина) якщо ліве значення чисельно дорівнює правому
  2. eg - повертає TRUE якщо ліве значення (рядкове) одно правому
  3. != - повертає TRUE якщо ліве значення чисельно дорівнює правому
  4. ne - повертає TRUE якщо ліве значення (рядкове) не дорівнює правому
  5. <=> повертає -1, якщо < ; 0, якщо = 1, якщо > , застосуємо до чисел
  6. cmr - повертає -1 , якщо < ; 0 , якщо = 1 , якщо > , застосуємо до рядків

Оператори роботи з бітами:

  1. & - повертає побітове && , тобто логічне І (об'єднання)
  2. I - повертає побітове II, тобто логічне АБО (вибір лівого аргумент)
  3. ^ - повертає побітове виключення АБО (лівий і правий аргумент буде оброблений)

Логічні оператори І (&&) і АБО (II):

&& - якщо лівий аргумент  вірна ( true ), то буде перевірений і правий, якщо невірний (false) - правий теж буде вважатися вірним і не буде перевірений

II - якщо лівий аргумент  невірний (false) , то буде перевірений правий, якщо вірна ( true ) - правий не буде перевірятися

Оператор діапазону:

Даний оператор позначається двома точками " .. " . Застосування в різних контекстах (списковом і скалярному) приводять до різних результатів його роботи. Так наприклад в списковом контексті він працює від лівого значення списку до правого з кроком - одна одиниця. Приклад:

for $i (8..15)

{print "$i ";

} # отримаємо наступне: 8 9 10 11 12 13 14 15

Оператори присвоювання:

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

**=

+=, -=, .=

*= , /=, %=, x=

&=, I=, ^=

<<=, >>=

&&=, II=

 

 

 

 

Оператор "кома" (","):

В скалярному контексті він обробляє ліве вираз і відкидає його значення, потім обробляє праве і повертає його величину. У списковом контексті він грає роль роздільника при перерахуванні елементів і вставляє всі елементи в список.

Оператор "NOT (логічне НЕ):

Має однакове застосування з " ! " ( див. вище ), але з більш низьким пріоритетом.

Оператори: Логічне І, АБО і Виключає АБО:

  1. and - еквівалент оператора " &&" ( див. вище ), але має нижчий пріоритет і " обмеженість " дії. тобто він не повернеться до лівого аргументу, якщо він "false"
  2. or - працює за принципом попереднього, але еквівалентний " II"
  3. xor - виключне АБО, тобто обробляє і лівий і правий аргумент.

 

4.Основні конструкції мови

 

Perl підтримує оператори циклів for, while і do з невеликими відмінностями від їх реалізації в мові С. Істотною відмінністю є те, що Perl вимагає використання інструкцій блоками, укладених у фігурні дужки. Крім того, як ви познайомитеся , далі, Perl розширює конструкцію циклу, что6ы забезпечити її деякі нові форми. У наступних прикладах цикли for, while і do працюють аналогічним чином на мовах С і Perl:

for($i = 0; $i< 100;$i++)

{

printf("%d\n", $i) ;

}

while ($i > 0)

{

printf("%d\n", $i);

}

do {

printf("%d\n", $i++);

} while ($i < 0);

Конструкція циклів на мові С відмінна від конструкції на мові Perl ще і в тому, що Perl не містить оператора break, а оператор continue виконує зовсім іншу функцію. На щастя, Perl забезпечує деякі нові, більш гнучкі і більш інтуїтивно зрозумілі конструкції:

last вихід з циклу (як оператор break)

next почати нову ітерацію (як оператор continue)

redo повторити поточну ітерацію

Для розуміння конструкцій циклів на мові Perl, необхідно розібратися з використанням блоку continue. Розглянемо наступний цикл while, який містить блок continue:

$i = 100;

while ($i > 0)

{

print $i;

} continue {$i-}

У сценарії Perl мітки просто означають ім'я, відповідне якогось положення всередині скрипта. Імена міток закінчуються двокрапкою (наприклад, outerloop:). Використовуючи оператор goto, скрипт може здійснювати переходи на мітку. Додатково можуть використовуватися оператори last, next і redo, для переходу до мітки. Наступний код ілюструє використання оператора last для переходу на мітку:

outerloop: while ($i > 0)

{

while ($j > 0)

{

#Тут який-небудь інший  процес

if ($needToAboutLoop)

{

last outerloop;

}

}

}

У цьому випадку інструкція містить гілка last для переходу на мітку outerloop і закінчення виконання циклу.

Ще однією конструкцією циклу у мові Perl є цикл до тих пір, поки, який є протилежністю циклу while. Як ви пам'ятаєте, в циклі while інструкції виконуються до тих пір, поки виконується задана умова. В циклі доти, поки, навпаки, інструкції виконуються до тих пір, поки не буде виконана умова. Наприклад, розглянемо цикл while, такий, як показано на наступній сторінці.

while (!(expr))

{

заяву;

}

Використовуючи цикл до тих пір, поки можна створити ідентичний цикл, показаний нижче:

до тих пір, поки (expr)

{

заяву;

}

Аналогічним чином наступна конструкція do while використовує оператор логічного заперечення для того, щоб виконувати цикл, доки заданий булеве вираз не стане істинним:

зробити

{

заяву;

} while (!(expr));

Використовуючи конструкцію робити до тих пір, поки, ви можете сформувати ідентичний цикл без використання логічного заперечення:

зробити

{

заяву;

} до тих пір, поки (expr);

Perl підтримує цикл for абсолютно аналогічно мови:

for (statement1; expression; statement2)

{

statement3;

}

Наприклад, наступний код використовує цикл for для того, щоб вивести значення чисел від 0 до 100:

for ($digit = 0; $digit <=100; $digit++)

{

print $digit, - -;

}

Додатково Perl містить конструкцію циклу foreach, який дозволяє скрипту організовувати ітерації в списках і масивах. Розглянемо приклад:

@list = (-a,-b,-c-);

foreach $arg (@list)

{

print ?List item: $arg\n¦;

}

foreach $i (1..10)

{

print ?iteration $i\n¦

}

У першому випадку цикл foreach здійснював перебір значень в обліковій змінної @list. У другому прикладі в циклі foreach здійснюється перебір чисел у діапазоні від 1 до 10.

Всередині циклу foreach може фігурувати список, що складається з символів, або масив, як було показано в попередньому прикладі. Після виконання однієї ітерації циклом, спеціальна скалярна змінна {$arg в першому випадку і $i у другому випадку) приймає значення із заданого списку елементів. Область видимості цієї скалярної змінної циклу foreach обмежується тілом циклу. Тому скалярна змінна циклу, foreach не буде конфліктувати з ідентичним іменем змінної, визначеної поза циклу. В наступному коді змінна з ім'ям $i використовується усередині і поза циклу foreach:

$i = 1001;

foreach $i (1..9)

{

print ?$i\n¦; # цикл виведе 123456789

}

print ?$i\n¦;

Як можна побачити з цього прикладу, змінна $i, використовувана для організації ітерацій циклу, не конфліктує з змінної $i, визначеної поза циклу.

Особливістю циклу foreach, яку ваші скрипти можуть використовувати, є можливість модифікації елементів масиву. (Будьте обережні при реалізації цієї можливості!) Розглянемо наступний цикл foreach, який додає значення 10 кожному елементу масиву:

@list = 1..5;

foreach $i (@list)

{

$i += 10;

}

$, = - -;

print @list; # виведе 11 12 13 14 15

 У мові Perl імена і for foreach розглядаються як синоніми. Тому в скриптах можна використовувати ці імена поперемінно. Perl, у свою чергу, буде визначати тип циклу, грунтуючись на його контексті.

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

(3, 4, 5) # Масив з трьох  елементів - 3, 4 і 5

("Микола", 23, 4.5, 4) # Масив  з чотирьох елементів - "Микола", 23, 4.5 і 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

 

    1. Режим доступу:  http://altcode.ru/perl/

    1. Режим доступу: http://ru.wikipedia.org/wiki/Perl

    1. Режим доступу: http://linuxland.itam.nsc.ru/misc/progperl/perl_rus3.htm

    1. Режим доступу: http://www.novice.ws/perl/perloperator1.htm

 

 

 


Загальний огляд та порівняльний аналіз мов ОПП. Мова програмування Perl