Урок за Perl: променлива, масив, хешове с пример за програмиране

Какво е Perl?

Perl е интерпретиран динамичен език за програмиране с общо предназначение на високо ниво. Perl е термин, който означава „Практически език за извличане и докладване“, въпреки че няма акроним за Perl. Въведен е от Лари Уол през 1987 г. Езикът Perl е специално проектиран за редактиране на текст. Но сега той се използва широко за различни цели, включително системно администриране на Linux, мрежово програмиране, уеб разработка и др.

Преглед на езиците за програмиране

Нека го кажем по прост начин. Докато компютрите разбират само 0 и 1 (двоичен език/машинен език/ [език на ниско ниво]), е много трудно да програмираме на двоичен език за нас, хората. Perl е език за програмиране, който използва елементи от естествен език, думи, които се използват в общия английски език и следователно е по-лесен за разбиране от хората [език на високо ниво]. Сега има проблем; компютрите не могат да разберат езици от високо ниво, които ние, хората, можем лесно да разберем. За това имаме нужда от нещо, което може да преведе езика от високо ниво на език от ниско ниво. Тук на помощ идва преводачът. Интерпретаторът е част от софтуера, който преобразува програмата, написана на език от високо ниво, в език от ниско ниво, за да може компютърът да разбере и изпълни инструкциите, написани в програмата. Следователно Perl е интерпретиран език за програмиране.

Къде се използва Perl?

Силата на скриптовия език Perl може да се приложи в много области. Най-популярната употреба на Perl е в уеб разработката. Perl се използва и за автоматизиране на много задачи в уеб сървърите и други административни задачи, той може автоматично да генерира имейли и да почиства системи. Perl все още се използва за първоначалната си цел, т.е. извличане на данни и генериране на отчети. Той може да създава отчети за използването на ресурси и да проверява за проблеми със сигурността в мрежата. Поради тази причина Perl се превърна в популярен език, използван и в уеб разработката, работата в мрежи и биоинформатиката. Освен всичко това perl може да се използва и за CGI програмиране.

Perl може да се използва и за създаване и манипулиране на изображения. Освен работата в мрежа чрез telnet, FTP и т.н., създаването на графичен потребителски интерфейс, VLSI електрониката и създаването на пощенски филтри за намаляване на спам практиките са някои случаи на използване на Perl.

Perl също е известен с прилагането на ООП (обектно ориентирано програмиране) практики и поддържа всички форми на наследяване (просто, множествено и диамантено), полиморфизъм и капсулиране. Perl е достатъчно гъвкав, за да поддържа както процедурни, така и ООП практики едновременно. Perl също има допълнителни модули, които ви позволяват да пишете или използвате/използвате повторно код, написан в него Python, PHP, PDL, TCL, Octave, Java, ° С, C++, Basic, Ruby и Lua във вашия Perl скрипт. Това означава, че можете да комбинирате Perl с тези екстри програмни езици по-скоро пренаписване на съществуващ код.

Приложения на езика за програмиране Perl

Приложения на езика за програмиране Perl

Защо да използвате Perl?

Вярно е, че има други езици за програмиране, които могат да се използват за извършване на всички неща, посочени по-горе, тогава защо трябва да използвате специално Perl? Perl е много лесен за научаване, особено ако имате опит в компютърното програмиране. Perl е проектиран да бъде лесен за писане и разбиране от хората, вместо да го прави лесен за обработка от компютри. Той използва регулярни изрази. Естественият стил на езика е различен от другите езици за програмиране, които използват специфична граматика и синтаксис; следователно, Perl е много гъвкав и не ви налага някакъв конкретен начин за измисляне на решение или проблем. Perl е изключително преносим. Може да работи на всяка операционна система, която има инсталиран интерпретатор на Perl, така че е независим от платформата. Всички Linux Operating Systems се инсталират с Perl, така че можете да започнете кодирането на Perl в Linux веднага. Това е за разлика от скриптовете на Shell, където кодът се променя с вкуса на използваната Linux дистрибуция, което я прави все по-малко преносима Малките специфични задачи в Perl стават много лесни и бързи. В този урок по Perl за начинаещи ще научите как можете да кодирате малки, бързи програми за специфични задачи. Нека вземем прост пример за класическата програма Hello World, която се използва за започване на изучаване на всеки език за програмиране, който има UNIX като корени:

Пример: Perl здравей свят

Прост пример за Perl

#!/usr/bin/perl
print "Hello, world!";

Изход:

Здравей, свят!

Горните два реда код ще отпечатат Hello, world! Сега не беше ли твърде просто и бързо? Студенти с познания по С, C++ ще знае, че изисква много повече редове код, за да получи същия изход на тези езици.

Може би се чудите защо Perl е толкова известен в мрежата. Лесно е, тъй като повечето от нещата, които се случват в мрежата, са от ТЕКСТ и Perl е много добър в обработката на текст. Ако сравним Perl с някой от езиците, тогава Perl ще бъде най-добрият език, който е добър при обработка на файлове, обработка на текст и отчитане на изхода

Едно от най-добрите предимства на Perl е, че е безплатен за използване

Общността на Perl силно вярва, че софтуерът трябва да бъде свободно достъпен, свободно модифицируем и свободно разпространяван. Няколко доброволци от общността на Perl се стремят да направят езика за програмиране възможно най-добър.

Предимства и недостатъци на Perl

Плюсове: Минуси:

Предимства на Perl

Недостатъци на Perl

  • В сравнение с други езици за програмиране, Perl е най-мощният за обработка на текст и анализиране
  • Това е интерпретиран език с бързо време за изпълнение, тъй като не е необходимо да се компилира Perl скрипт
  • Прост и лесен за програмиране и разбиране.
  • Той е обектно-ориентиран.
  • Библиотеката CPAN улеснява разработката на Perl (ще научим повече за това по-късно в темата).
  • Използва се в уеб разработката предимно за шлюзове за плащане.
  • Използва се в автоматизацията и за тестване на повечето неща, свързани с мрежата и съхранението.
  • Има минимална поддръжка на GUI в сравнение с други езици за програмиране.
  • Трябва да се обърнете към сложни библиотечни модули, които не са толкова лесни за разбиране (Не се плашете, след като знаете как да правите нещата, всичко ще бъде лесно).
  • Разбирането на сложни модели изисква опит.

Да започваме

С достатъчно познания за историята на Perl и основните концепции на компютърното програмиране, необходими за кодиране в Perl, е време да се гмурнем и да започнем с Perl. Следващата глава ще ви научи как можете да настроите Perl на вашата система и да се подготвите за пътуването с кодиране в Perl. Този урок за скриптове на Perl ще приеме Linux като операционна система, която учениците ще използват за кодиране в Perl.

Изтеглете и инсталирайте Perl – Windows, Mac & Linux

Как да получа Perl?

Добри новини вероятно го имаш!

Но ако вече не можете да го намерите във вашата система, пак можете да го получите безплатно.

За да разберете дали вече имате инсталиран Perl, влезте в командния ред и напишете: perl -v

Как да изтеглите perl

Командата ще покаже версията на Perl, ако е инсталирана. В този случай версията е v5.14.2. Но ако не… не се паникьосвайте…

UnixУрок за PERL за начинаещи - Пълно ръководство Вече е инсталирано Предлага се предварително инсталиран с Perl, въпреки че може да се наложи да актуализирате до най-новата версия.
Mac OS Урок за PERL за начинаещи - Пълно ръководство Вече е инсталирано OSX идва с предварително инсталиран Perl, въпреки че може да се наложи да го актуализирате до най-новата версия
WindowsУрок за PERL за начинаещи - Пълно ръководство Трябва да се инсталира Налични са две опции

  1. Strawberry Perl е двоична дистрибуция с отворен код на Perl за Windows OS. Той включва компилатор и предварително инсталирани модули, които предлагат възможност за инсталиране на XS CPAN модули директно от CPAN
  2. ActiveState perl предоставя двоична дистрибуция на Perl (за много платформи), както и собствен мениджър на пакети Perl (PPM)

Актуализиране на Perl на Linux:

Ако трябва да актуализирате версията на Perl, просто въведете един единствен команден ред

sudo apt-get инсталирайте perl

и се отпуснете. За останалото ще се погрижим. Просто се уверете, че имате активна интернет връзка.

Актуализирайте PERL на Linux

Актуализирайте PERL на Linux

Инсталирайте perl за Windows:

Първо изтеглете Active Perl от това връзка. Следвайте тези стъпки, за да инсталирате ActivePerl на Windows система. Вижте екранните снимки по-долу за същото.

Стъпка 1: След като изтеглите инсталатора и започнете инсталацията, ще видите прозореца по-долу, щракнете върху следващия, за да продължите.

Как да инсталирате Perl на Windows

Стъпка 2: Приемете лицензионното споразумение, за да продължите инсталацията.

Как да инсталирате Perl на Windows

Стъпка 3: По-долу са различни пакети, които ще бъдат инсталирани. По подразбиране всички ще бъдат избрани. Единственото различно нещо е PPM (Perl Package Manager). Това е помощната програма, предоставена от Active Perl за инсталиране на външни Perl модули или библиотеки във вашата система. Кликнете върху Напред, за да продължите.

Инсталиране на Perl на Windows

Стъпка 4: Това са различни типове разширения на Perl, които могат да се използват за Perl. Най-вече ще използваме .Pl, .Plx и .Pm за Perl. Модулите на Perl основно използват .Pm като файлово разширение за препращане към библиотечен файл. Изберете всички опции и щракнете върху бутона Напред.

Инсталиране на Perl на Windows

Стъпка 5: Щракнете върху бутона Инсталиране, за да продължите с инсталацията.

Инсталиране на Perl на Windows

Стъпка 6: Веднъж инсталиран, изпълнете командата „Perl –v“, за да проверите дали Perl е инсталиран успешно във вашата система.

Инсталацията на PERL е включена Windows

Има много неща, които трябва да бъдат обсъдени за настройка на Perl среда както в Linux, така и в Windows, тъй като няма да има много библиотечни файлове, включени в тази инсталация. Трябва да ги инсталирате ръчно. Можете да ги инсталирате ръчно с помощта на CPAN (Comprehensive Perl Archive Network) или PPM, който работи само за perl windows. Но тези файлове не са задължителни за започване на кодиране в Perl.

Освен тази настройка на Windows, която можете да използвате Windows 10 нова функция на подсистемата на Linux над Windows и я използвайте за изпълнение на perl код

Първа програма Perl

Hello world!

Пример за Perl: Здравей свят

#!/usr/bin/perl -w
#this is just a comment…
print "Hello World";

Не се притеснявайте, ако не разбирате този текст. Скоро всичко ще стане ясно. Хайде и го разгледайте по ред:

#!/usr/bin/perl		

Това разказва на Operating System за изпълнение на този файл с програмата, намираща се в /usr/bin/perl Някои IDE не се нуждаят от този ред. Ако е от съществено значение, трябва да напишете тук път до вашия преводач. Запомнете! Този специален ред трябва да е в началото на вашата програма и трябва да започва от #! използвайте предупреждения; Това е друга специална команда, която казва на интерпретатора да показва всички предупреждения, т.е. -w, която активира предупрежденията глобално.

print "Hello World";		

Инструкцията за печат пише текст на екрана. Точката и запетая в края на реда казва на perl интерпретатора, че инструкцията е завършена. Трябва да поставите точка и запетая в края на всяка инструкция в кода на Perl. Обърнете внимание на кавичките (“). Необходимо е за отпечатване на инструкция. Запазете горния скрипт като firstprog.pl

On Windows

Ако сте инсталирали Strawberry, можете просто да щракнете върху Run. Можете също да стартирате интерфейс на командния ред и да пишете на конзолата:

C:\> perl path\firstprog.pl		

или, ако perl.exe не е на пътя ви:

C:\> c:\perl\bin\perl.exe firstprog.pl		

На Linux/Unix

Просто трябва да отворите терминала и да напишете:

perl firstprog.pl		

Ако не можете да стартирате програмата, уверете се, че имате право да я стартирате. Въведете в терминала:

chmod +x firstprog.pl		

Вашата програма вече е изпълнима и готова за изпълнение. За да изпълните, напишете:

./firstprog		

Инсталирайте cpan минус модули

Модулите са набор от кодове, които се използват за изпълнение на задачи, които изпълняват общи операции в няколко програми. Ако използвате perl модули, не е необходимо да пренаписвате кодовете, за да извършите същата операция. Perl може да използва такива външни библиотеки от кодове. Една от най-добрите библиотеки е CPAN. Това означава Comprehensive Perl Archive Network и съдържа огромно количество Perl модули, които можете да използвате. Това е общност или мрежа от голям брой разработчици, които допринасят с такива модули. Като инсталирате поддръжка за CPAN модули във вашия perl модул, можете да използвате CPAN модулите и да улесните работата си. Повечето Perl модули са написани на Perl, някои използват XS (те са написани на C), така че изискват C компилатор (лесно е да получите тази настройка – не се паникьосвайте. Модулите може да имат зависимости от други модули (почти винаги от CPAN) и не може да се инсталира без тях (или без тяхна конкретна версия). Заслужава си да прочетете подробно документацията за опциите по-долу вземете, разопаковайте, изградете и инсталирайте модули от CPAN, за да улесните инсталирането на други модули (ще ни благодарите по-късно). App-cpanminus perl модули, в командния ред въведете:

cpan App::cpanminus

cpan App::cpanminus Уверете се, че имате интернет връзка, докато perl модулите се изтеглят и инсталират.

Инсталиране на cpan минус модули

Сега инсталирайте произволен модул:

cpan –i <Module_Name>.		

Нека да видим пример за инсталиране на модул File::Data (Това е интерфейс за достъп до File Data).

Инсталиране на cpan минус модули

Променлива на Perl

Сега ще говорим за променливи. Можете да си представите променлива като вид контейнер, който съдържа една или повече стойности. Веднъж дефинирано, името на променливата остава същото, но стойността или стойностите се променят отново и отново.

Има 3 вида променливи:

Типове променливи в Perl

Типове променливи в Perl

Най-лесните са скаларите и това е днешната ни тема

Скаларна променлива

Този тип променлива съдържа една стойност.

Името му започва със знак за долар и Perl идентификатор (това е името на нашата променлива).

Скаларна променлива в Perl

Скаларна променлива в Perl

Конвенция за наименуване

Ако сте запознати с други езици за програмиране, тогава ще знаете, че има определени правила за именуване на променливи. По същия начин Perl има три правила за именуване на скалари.

  1. Всички скаларни имена ще започват с $. Лесно е да запомните да поставяте пред всяко име $. Представете си го като $скалар.
  2. Като PHP. след първия знак $, който е специален в Perl, са разрешени буквено-цифрови знаци, т.е. a до z, A до Z и 0 до 9. Позволено е също и долна черта. Използвайте долна черта, за да разделите имената на променливите на две думи. „Но първият знак не може да бъде число“
  3. Въпреки че числата могат да бъдат част от името, те не могат да идват веднага след $. Това означава, че първият знак след $ ще бъде или азбука, или долна черта. Идващите от C/C++ фонът трябва незабавно да може да разпознае приликата. Примери

Пример за Perl:

$var;
$Var32;
$vaRRR43;
$name_underscore_23;

Това обаче не са законни имена на скаларни променливи.

mohohoh                                              # $ character is missing 
$                                                    # must be at least one letter 
$47x                                           # second character must be a letter
$variable!                                 # you can't have a ! in a variable name

Общото правило гласи, че когато Perl има само едно от нещо, това е скалар. Скаларите могат да се четат от устройства и ние можем да ги използваме в нашите програми.

Два типа скаларни типове данни

  1. Numbers
  2. Strings

Numbers:

В този тип скаларни данни можем да посочим:

  • цели числа, това са просто цели числа, като 2, 0, 534
  • числа с плаваща запетая, това са реални числа, като 3.14, 6.74, 0.333

Числови променливи в Perl

Забележка: По принцип интерпретаторът на Perl вижда цели числа като числа с плаваща запетая. Например, ако напишете 2 във вашите програми, Perl ще го види като 2.0000

Целочислени литерали:

Състои се от една или повече цифри, незадължително предшествани от плюс или минус и съдържащи долна черта.

Примери за Perl:

0;
-2542;
4865415484645          #this also can be written with underscores (for clarity) : 4_865_415_484_645

Както виждате - не е нищо особено. Но повярвайте ми, това е най-често срещаният тип скалари. Те са навсякъде.

Литерали с плаваща запетая:

Състои се от цифри, по избор минус, десетична запетая и експонента.

Примери за Perl:

3.14;
255.000;
3.6e20;                                  # it's 3.6 times 10 to the 20th
-3.6e20;                                 # same as above, but negative
-3.6e-20;                                #it's negative 3.6 times 10 to the -20th
-3.6E-20;                                #we also can use E – this means the same the lowercase version -3.6e-20

Литерали с плаваща запетая в Perl

Осмично, шестнадесетично и двоично представяне:

Това е алтернатива на десетичната система. Позволете ми да ви покажа осмично, шестнадесетично и двоично представяне. Кратка таблица представя цялата важна информация за тези странни стилове:

Представителство база Продължава от
Осмичен 8 0 (нула)
Hexadecimal 16 0x
Двоен 2 0b

Примери за Perl:

255;                               # 255 in decimal notation
0377;                                   # 255 in octal notation
0xff;                                   # 255 in hexadecimal notation
0b11111111;                             # 255 in binary notation

Всички тези стойности за Perl означават едно и също. Perl не съхранява стойностите в същия формат. Той вътрешно ще конвертира тези шестнадесетични, двоични, осмични в десетични стойности.

Присвояването е най-често срещаната операция върху скалар и е много проста. Perl използва за този знак за равенство. Той взема стойност на израза от дясната страна и поставя тази стойност в нашата променлива.

Нека да разгледаме примери:

$size=15;             # give $size value of 15
$y = -7.78;           # give $y value of -7.78

Нещо повече, можете да поставите в променлива не само число, но и израз.

$z = 6 + 12               # give $z value of 18

Strings

Стрингове: Това също е много прост тип скалар.

Максималната дължина на низ в Perl зависи от количеството памет на компютъра. Няма ограничение за размера на низа, всяко количество знаци, символи или думи може да съставлява вашите низове. Най-късият низ не съдържа знаци. Най-дългият може да запълни цялата системна памет. Програмите на Perl могат да бъдат написани изцяло в 7-битов ASCII символен набор. Perl също ви позволява да добавяте всеки 8-битов или 16-битов набор от знаци, известен още като. не-ASCII символи в низови литерали. Perl също добави поддръжка за Unicode UTF-8.

Видове низове в Perl

Подобно на числата има два различни типа низове:

  • Единични кавички низови литерали
  • Double цитира низови литерали

Низови литерали в единични кавички

Единичните кавички се използват за ограждане на данни, които искате да се възприемат буквално. Кратък пример и всичко трябва да е ясно:

Примери за Perl:

#!/usr/bin/perl 
$num = 7;
$txt = 'it is $num';
print $txt;

Изход:

това е $num

Тук поради единични кавички стойността на $num не е взета и литералните знаци '$','n', 'u' & 'm' се добавят към стойността на $txt

Double-цитирани низови литерали

Double кавичките се използват за ограждане на данни, които трябва да бъдат интерполирани преди обработка. Това означава, че екранираните символи и променливи не се вмъкват буквално в по-късни операции, а се оценяват на място. Символите за екраниране могат да се използват за вмъкване на нов ред, раздели и т.н.

Примери за Perl:

$num = 7; 
$txt = "it is $num"; 
print $txt;

Изход:

това е 7

Тук поради двойни кавички стойността на $num се добавя към стойността на $txt

Double-кавичките интерполират скаларни и масивни променливи, но не и хешове. От друга страна, можете да използвате двойни кавички, за да интерполирате части от масиви и хешове.

Мистериозен \n

Помислете за следната програма

Примери за Perl:

print "hello \n";

Изход:

здравей

Perl не показва само 'hello\n', а само 'hello'. защо Тъй като '\n' е специален знак и означава, че искате да отидете на нов ред, докато показвате текста във вашата програма. отпечатайте „здравей\n нов ред“; Следващ въпрос - има ли друг специален знак? Да, те са! Но не се притеснявайте – само няколко. Проверете таблицата по-долу

Построява Descriptйон
\n нова линия
\r връщане
\t етикет
\f formfeed
\b Backspace
\a звънец
\e бягство
\007 XNUMX произволна осмична ASCII стойност (тук 007 = звънец)
\x7f всяка шестнадесетична стойност (тук, 7f = изтриване)
\\ наклонена черта
\ " двойни кавички
\l малка следваща буква
\L малки букви до \E
\u главна следваща буква
\U главни букви всички следващи букви до \E
\E Прекратете \L, \U

Знам, че няма „само няколко“… Но повярвайте ми, просто трябва да знаете

Променлива на низове

Това е същата операция, която виждаме при присвояването на числа. Perl получава нашия низ от дясната страна на знака за равенство и поставя този низ в променлива.

Примери за Perl:

$string = 'tutorial';                                      # give $string the eight-character string 'tutorial'
print $string;
$string = $size + 3 ;                                           # give $string the current value of $size plus 3
print $string;
$string = $ string * 5;                                         # multiplied $string by 5
print $string;

Изход:

урок315

Както можете да видите, можете да поставите числа и низове в едни и същи променливи. Няма клас променливи.

Конкатенация на низове (точка):

Операторът за конкатенация „.“ обединява два или повече низа. Запомнете! Ако низът съдържа кавички, връщане на каретка, обратни наклонени черти, всички тези специални знаци трябва да бъдат екранирани с обратна наклонена черта.

Примери за променлива на Perl:

#!/usr/bin/perl
$a = "Tom is";
$b = "favorite cat";
$c = $a ." mother's ". $b;
print $c;

Изход:

Том е любимата котка на мама

Струните

„$a“, „$b“, се свързват и съхраняват в „$c“ с помощта на „.“ оператор.

В края…

Преобразуване между Numbers и низове:

Както знаете, Perl автоматично преобразува между числа в низ, ако е необходимо. Как Perl знае от какво се нуждаем в момента? Това е просто - всичко зависи от оператора (ще говорим за операторите по-късно, сега, просто приемете, че има много оператори, различни за числа и низове) Ако оператор очаква число, Perl ще използва стойността като число . Ако оператор очаква низ, Perl ще използва стойността като низ. С други думи - не е нужно да се притеснявате за този вид преобразуване. Кратък пример и всичко трябва да е ясно:

Примери за Perl:

$string = "43";
$number = 28;
$result = $string + $number;
print $result;

Изход:

71

стойността на $string се преобразува в цяло число и се добавя към стойността на $number.

Резултатът от добавянето, 71, се присвоява на $result.

Обхват на променлива – модификатори на достъп

Можем да декларираме скалар навсякъде в програмата. Но трябва да посочите модификатор за достъп

Има 3 вида модификатори

  1. my
  2. местен
  3. наш

My: С помощта на това можете да декларирате всяка променлива, която е специфична в блока. т.е. във фигурните скоби.

#!/usr/bin/perl 
my $var=5;
if(1)
{ 
my $var_2 =$var;
}
print $var_2;

Няма изход

Резултатът от програмата няма да бъде нищо!

Урок за PERL за начинаещи - Пълно ръководство

В горния пример ще видите, че има две декларирани променливи, едната е вътре в блока if ($var_2), а другата е извън блока If ($var). Променливата, която е декларирана извън блока, ще бъде достъпна за блок if, но променливата, която е декларирана вътре в блока if, няма да бъде достъпна за външната програма.

Локално: Използвайки това, ние всъщност можем да маскираме едни и същи стойности на променлива в различни стойности, без всъщност да променяме първоначалната стойност на променливата, да предположим, че имаме променлива $a, за която стойността е присвоена 5, вие всъщност можете да промените стойността на тази променлива чрез повторно деклариране на същата променлива с помощта на локална ключова дума, без да се променя първоначалната стойност на променливата, която е 5. Нека да видим как работи това с пример.

#!/usr/bin/perl
$var = 5;
{
local $var = 3;
print "local,\$var = $var \n";
}
print "global,\$var = $var \n";

Резултатът от горната програма ще бъде по този начин.

локален, $var = 3

глобално, $var = 5

По този начин можем да променим стойността на променливата, без да засягаме първоначалната стойност.

Our: След като променлива е декларирана с модификатор за достъп „our“, тя може да се използва в целия пакет. Да предположим, че имате Perl модул или пакет test.pm, който има променлива, декларирана с обхват our. Тази променлива може да бъде достъпна във всеки скрипт, който ще използва този пакет.

Ако сериозно се занимавате с програмиране в Perl, трябва да започнете програмата си с

#!/usr/local/bin/perl

използвайте строг;

Това ще ви помогне да пишете по-добър и чист код. 'use strict' включва строга прагма, която ще ви накара да декларирате вашите променливи с моята ключова дума.

Това е добра практика за програмиране

#!/usr/local/bin/perl
use strict;
$var = 10;
print "$var";

Резултат: Грешка

#!/usr/local/bin/perl
use strict;
my $var = 10;
print "$var";

Изход:

10

Perl масив

Какво е Perl Array?

Масивът е специален тип променлива, която съхранява данни под формата на списък; всеки елемент може да бъде достъпен с помощта на индексния номер, който ще бъде уникален за всеки елемент. Можете да съхранявате числа, низове, плаващи стойности и т.н. във вашия масив. Това изглежда страхотно, така че как да създадем масив в Perl? В Perl можете да дефинирате масив, като използвате знака '@', последван от името, което искате да дадете. Нека разгледаме дефинирането на масив в Perl.

моят @масив;

Ето как дефинираме масив в Perl; може би си мислите как трябва да съхраняваме данни в него. Има различни начини за съхраняване на данни в масив. Това зависи от това как ще го използвате.

my @array=(a,b,c,d);
print @array;

Изход:

ABCD

Това е масив с 4 елемента в него.

Индексът на масива започва от 0 и завършва до неговия максимален деклариран размер, в този случай максималният размер на индекса е 3.

Пример за Perl масив

Пример за Perl масив

Можете също така да декларирате масив по горния начин; единствената разлика е, че съхранява данни в масив, като смята, че бялото пространство е разделител. Тук qw() означава дума в кавички. Значението на тази функция е да генерира списък с думи. Можете да използвате qw по множество начини за деклариране на масив.

@array1=qw/a b c d/;
@array2= qw' p q r s'; 
@array3=qw { v x y z};
print @array1;
print @array2;
print @array3;

Изход:

abcdpqrsvxyz

Да предположим, че искате да присвоите стойност на 5th елемент от масив, как ще направим това.

$масив [4] ='e';

Последователен масив

Последователните масиви са тези, в които съхранявате данни последователно. Да предположим, че искате да съхраните 1-10 числа или букви az в масив. Вместо да въвеждате всички букви, можете да опитате нещо като по-долу –

@numbers= (1..10);
print @numbers;                   #Prints numbers from 1 to 10;

Изход:

12345678910

Размер на Perl масив

Имаме масив, който вече е наличен и вие не знаете какъв е размерът на този масив, така че какъв е възможният начин да го намерите.

@array= qw/a b c d e/;
print $size=scalar (@array);

Можем ли да получим размера на масив, без да използваме функции? Да, можем.

@array= qw/a b c d e/;
print $size=scalar (@array);
print "\n";
print $size=$#array + 1;                           # $#array will print the Max Index of the array, which is 5 in this case

Изход:

5

5

Динамичен масив

Горният метод за деклариране на масив се извиква статични масиви, където знаете размера на масива.

Какво е динамичен масив?

Динамичните масиви са тези, които декларирате, без да посочвате никаква стойност за тях. Кога точно съхраняваме стойности в този масив? Просто, съхраняваме ги по време на изпълнение. Ето една проста програма за това.

Ще използваме някои вградени функции на Perl за извършване на тази задача.

my $string="This is a kind of dynamic array";
my @array;
@array=split('a',$string);
foreach(@array)
{
print "$_ \n”;
# This is a special variable which stores the current value.
}

Изход:

Това е

вид дин

MIC

rr

y

Функцията split разделя съдържанието на низ в масив въз основа на предоставения му разделител. Тази функция също ще елиминира разделителя от низа, в този случай той е 'a';

Push, Pop, shift, unshift за Perl масиви:

Тези функции могат да се използват в Perl за добавяне/изтриване към елементи на масив.

  • Perl Push: добавя елемент от масив в края на съществуващ масив.
  • Perl Pop: премахва последния елемент от масив.
  • Perl Shift: премахва първия елемент от масив.
  • Perl Unshift: добавя елемент в началото на масив.

Функции за масиви в Perl

Нека видим пример, където можем да използваме функциите по-долу.

@days = ("Mon","Tue","Wed");
print "1st : @days\n";
push(@days, "Thu");                                             # adds one element at the end of an array
print "2nd when push : @days\n";
unshift(@days, "Fri");                                          # adds one element at the beginning of an array
print "3rd when unshift : @days\n";
pop(@days);
print "4th when pop : @days\n";                                 # remove one element from the last of an array.
shift(@days);                                                   # remove one element from the beginning of an array.
print "5th when shift : @days\n";

Изход:

1-ви: Пон Вт Ср

2-ро при натискане: пн вт ср чт

3-ти, когато е без смяна: петък, понеделник, вторник, сряда, четвъртък

4th when pop : петък, понеделник, вторник, сряда

5-та при смяна: понеделник вторник сряда

Хешове на Perl

Защо имаме нужда от Hash?

Вече научихме за скаларите и масивите в предишните раздели.

Какво точно правят скаларите? Той съхранява само цели числа и низове.

Какво точно правят масивите? Това е колекция от скалари, където имате достъп до всеки елемент от масив с помощта на индекси. Но добра идея ли е да използвате масив, когато имате стотици и хиляди записи? Ще забравим кой индекс каква стойност има. За да преодолеем тази ситуация имаме нещо като perl хеш.

Какво представляват хешовете?

Един хеш може също да съдържа толкова скалари, колкото може да побере масивът. Единствената разлика е, че нямаме никакъв индекс, а имаме ключове и стойности. Може да се декларира хеш, като се започне с %, последвано от името на хеша. Нека видим пример как можем да дефинираме Perl хеш и как можем да разграничим това от масив

Помислете за пример с трима души и техните възрасти са представени в масив.

@array=('Sainath',23,'Krishna',24,'Shruthi',25);        #This is how an array looks.
print @array;

Изход:

Sainath33Krishna24Шрути25

По този начин е трудно да знаем индивидуалните възрасти, тъй като трябва да запомним както местоположенията на индекса на името, така и възрастта на всички хора. Може да е просто, когато имате 3 имена, но когато имате 1000 или повече? Вие знаете отговора.

Хешове в Perl

Това можем да преодолеем с помощта на хеш.

Пример за хеш:

print %hash=( 'Sainath' => 23, 'Krishna' => 24, 'Shruthi' => 25); # This is how we create a hash.
print %hash=('Sainath',23,'Krishna',24,'Shruthi',25);# This way of assigning is called list.

Изход:

Sainath33Krishna24Шрути25Сайнат33Krishna24Шрути25

Вече декларирахме хеш, страхотно!! Но как да получим достъп или да го отпечатаме? Всеки елемент в хеша трябва да бъде достъпен с неговия свързан ключ, за който ще има присвоена стойност. Така че има съпоставяне едно към едно между всеки ключ и стойност в хеша.

За да отпечатате възрастта на който и да е човек, просто трябва да запомните името на този човек.

print $hash{'Krishna'};          # This how we should access a hash. Key enclosed within {}.

Може би сте се чудили защо използвах $hash{KeyName}, не забравяйте, че хешът отново е колекция от скалари. Така че можем да използваме $, което представлява скалар за достъп до всеки хеш елемент.

Пример за хеш в Perl

Забележка: Всеки ключ в хеша трябва да е уникален или в противен случай той ще замени вашата стойност, която е била присвоена преди това.

Как можем да присвоим хеш на друг хеш? Просто, по същия начин, както ние за

Можем също да отпечатаме целия хеш.

%hash=( 'Tom' => 23);
%newHash=%hash; # Assigning hash to a new hashprint %newHash; 
print %newHash;

Изход:

Tom23

Добавете Perl хешове

Както можете да видите, вече имаме хеш %newHash и сега трябва да добавим още записи в него.

$newHash{'Jim'}=25;
$newHash{'John'}=26;
$newHash{'Harry'}=27;
print %newHash;

Изход:

Джим25Джон26Хари27

Ключ за изтриване на Perl

Може да искате да изтриете запис от хеш. Ето как можем да го направим.

delete $newHash{'Jim'};#This will delete an entry from the hash.

Delete е вградена функция на Perl. Тук ще видим пример за присвояване на хеш на масив.

@array=%newHash;
print "@array";

Забележка: Всеки път, когато отпечатвате хеш или когато съхранявате хеш в масив. Редът винаги може да е различен. Не винаги е същото.

Можем да присвоим само ключове или стойности на хеш към масив.

@arraykeys= keys(%newHash);
@arrayvalues=values(%newHash);
print "@arraykeys\n";
print "@arrayvalues\n";    # \n to print new line.		

За да премахнем всички записи в хеша, можем директно да присвоим хеша на null.

%newHash=();# Това ще предефинира хеша без записи.

Perl условни изрази

Можем да използваме условни изрази в Perl. И така, какво представляват условните изрази? Условните изрази са тези, при които всъщност проверявате дали някои обстоятелства трябва да бъдат изпълнени във вашия код.

Помислете за пример, купувате плодове и не ви харесва цената да е повече от 100 долара. И така, правилото тук е 100 долара.

Perl поддържа два типа условни изрази; те са ако и освен ако.

Perl Ако

Ако кодовият блок ще бъде изпълнен, когато условието е вярно.

Perl условни изрази

my $a=5;
if($a==5)
{
   print "The value is $a";
}

Изход:

5

Perl Ако друго

Това изглежда добре. Нека помислим за ситуация, в която $a не е 5.

my $a=10;
if($a==5)
{
    print "The values is $a ---PASS";
}
else
{
    print "The value is $a ---FAIL";
}

Изход:

Стойността е 10 —FAIL

По този начин можем да контролираме само едно условие в даден момент. Ограничение ли е? Не, можете също да контролирате различни условия, като използвате if… elsif … else.

Perl Else If

my $a=5;
if($a==6)
{
    print "Executed If block -- The value is $a";
}
elsif($a==5)
{
    print "Executed elsif block --The value is $a";
}
else
{
    print "Executed else block – The value is $a";
}

Изход:

Изпълнен elsif блок – Стойността е 5

В горния случай блокът elsif ще бъде изпълнен, тъй като $a е равно на 5.

Възможно е да има ситуации, при които кодовите блокове if и elsif ще бъдат неуспешни. В този сценарий ще бъде изпълнен кодовият блок else. Всъщност можете да премахнете проверката на кода else, ако не искате да включите.

Perl вложен If

В този случай можете да използвате if кодов блок в още един if кодов блок.

my $a=11; #Change values to 11,2,5 and observe output
if($a<10){
  print "Inside 1st if block";
        if($a<5){
                print "Inside 2nd if block --- The value is $a";
        }
        else{
                print " Inside 2nd else block --- The value is $a";
        }
	}
	else{
        	print "Inside 1st else block – The value is $a";
    }

Изход:

Вътре в 1-ви блок else – Стойността е 11

Изпълнете същия код, като промените стойността на $a; можете да разберете останалото.

Perl Освен ако

Вече имате представа какво прави if (Ако условието е вярно, то ще изпълни кодовия блок). Unless е противоположно на if, освен ако кодовият блок ще бъде изпълнен, ако условието е невярно.

my $a=5;
unless($a==5)
{
   print "Inside the unless block --- The value is $a";
}
else
{
   print "Inside else block--- The value is $a";
}

Изход:

Вътре в 1-ви блок else – Стойността е 5

Познайте какъв ще бъде резултатът. Прав си!!!!!. Резултатът ще бъде изразът за печат на блока else. Поради условието в unless code block is true, помнете unless block ще бъде изпълнен само ако условието е false. Променете стойността на $a и изпълнете кода и ще видите разликата.

Perl Използване на if

$a= " This is Perl";
if($a eq "SASSDSS"){
print "Inside If Block";
}
else
{
print "Inside else block"
}

Изход:

Вътре в блока else

Използване освен ако

$a= " This is Perl";
unless($a eq "SASSDSS"){
print "Inside unless Block";
}
else
{
print "Inside else block"
}

Изход:

Вътре, освен ако не се блокира

Perl цикли – контролни структури

Perl поддържа контролни структури, подобни на други езици за програмиране. Perl поддържа четири типа контролни структури за, foreach, while и until. Ние използваме тези изрази за многократно изпълнение на някакъв код.

За цикъл Perl

За кодовия блок ще се изпълнява, докато условието не бъде изпълнено. Нека вземем пример за това как Perl зацикля масив.

my @array=(1..10);
for(my $count=0;$count<10;$count++)
{
    print "The array index $count value is $array[$count]";
    print "\n";
}

Изход:

Стойността на индекса на масива 0 е 1

Стойността на индекса на масива 1 е 2

Стойността на индекса на масива 2 е 3

Стойността на индекса на масива 3 е 4

Стойността на индекса на масива 4 е 5

Стойността на индекса на масива 5 е 6

Стойността на индекса на масива 6 е 7

Стойността на индекса на масива 7 е 8

Стойността на индекса на масива 8 е 9

Стойността на индекса на масива 9 е 10

Тук, в израза for (), има включени много изрази. За всяка от тях има значение.

за (инициализация; условие; нарастване)

Ето още един начин за използване на.

for(1..10)
{
    print "$_ n";
    print "\n";
}

Изход:

1n

2n

3n

4n

5n

6n

7n

8n

9n

10n

Perl Foreach

Инструкцията за всеки може да се използва по същия начин като for; основната разлика е, че нямаме никаква проверка на условието и увеличаване в това.

Нека вземем същия пример с foreach perl.

my @array=(1..10);
foreach my $value (@array)
{  
	print " The value is $value\n";
}

Изход:

Стойността е 1

Стойността е 2

Стойността е 3

Стойността е 4

Стойността е 5

Стойността е 6

Стойността е 7

Стойността е 8

Стойността е 9

Стойността е 10

Foreach взема всеки елемент от масив и присвоява тази стойност на $var за всяка итерация. Можем също да използваме $_ за същото.

my @array=(1..10);
foreach(@array)
{
    print " The value is $_ \n"; # This is same as the above code.
}

Изход:

Стойността е 1

Стойността е 2

Стойността е 3

Стойността е 4

Стойността е 5

Стойността е 6

Стойността е 7

Стойността е 8

Стойността е 9

Стойността е 10

Това изглежда добре за достъп до масиви. Какво ще кажете за хешове, как можем да получим хеш ключове и стойности с помощта на foreach?

Можем да използваме foreach за достъп до ключовете и стойностите на хеша, като го зациклим.

For цикъл в Perl

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $key (keys %hash)
{
print "$key \n";
}

Изход:

Мики

том

Джери

Може би се чудите защо използвахме ключове във foreach(). Keys е вградена функция на Perl, където имаме бърз достъп до ключовете на хеша. Какво ще кажете за ценностите? Можем да използваме функцията values ​​за достъп до стойностите на хеша.

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $value(values %hash) # This will push each value of the key to $value
{
	 print " the value is $value \n";
}

Изход:

стойността е 24

стойността е 23

стойността е 25

Perl докато

Цикълът на Perl While е контролна структура, където кодовият блок ще се изпълнява, докато условието стане вярно.

Кодовият блок ще излезе само ако условието е невярно.

Нека вземем пример за Perl While цикъл.

Докато цикъл в Perl

Ето проблем, който ще изисква въвеждане от потребителя и няма да излезе, докато номерът, предоставен като '7'.

#!/usr/bin/perl
$guru99 = 0;
$luckynum = 7;
print "Guess a Number Between 1 and 10\n";
$guru99 = <STDIN>;
while ($guru99 != $luckynum)
{
	print "Guess a Number Between 1 and 10 \n ";
	$guru99 = <STDIN>;
}
print "You guessed the lucky number 7"

Изход:

Познайте число между 1 и 10

9

Познайте число между 1 и 10

5

Познайте число между 1 и 10

7

Познахте щастливото число 7

В горния пример условието while няма да е вярно, ако въведем вход, различен от '7'.

Ако видите как работи while тук, кодовият блок ще се изпълни само ако условието in a while е вярно.

Perl правя докато

Do while цикълът ще се изпълни поне веднъж, дори ако условието в секцията while е невярно.

Нека вземем същия пример, като използваме do while.

$guru99 = 10;
 do {
 print "$guru99 \n";
 $guru99--;
 } 
 while ($guru99 >= 1);
 print "Now value is less than 1";

Изход:

10

9

8

7

6

5

4

3

2

1

Сега стойността е по-малка от 1

Perl до

Until кодовият блок е подобен на unless в условен оператор. Тук кодовият блок ще се изпълни само ако условието в блока до е невярно.

Нека вземем същия пример, който използвахме за известно време.

Ето проблем, който ще изисква въвеждане от потребителя и няма да излезе, докато не бъде предоставено името, различно от „sai“.

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 until($name ne 'sai')
 {
    print "Enter any name \n";
    $name=<STDIN>;
    chomp($name);
 }

Изход:

Въведете произволно име sai

Perl do-until:

Do until може да се използва само когато имаме нужда условието да е невярно и то трябва да бъде изпълнено поне веднъж.

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 do
 {
     print "Enter any name \n";
     $name=<STDIN>;
    chomp($name);
 }until($name ne 'sai');

Изход:

Въведете произволно име Хауърд

Въведете произволно име Шелдън

Въведете произволно име sai

Изпълнете примерни кодове while, do-while, until и do-until, за да видите разликата.

Perl OperaTor

Какво е OperaТор?

Operators на компютърен език означават действие, което може да бъде извършено върху някакъв набор от променливи или стойности, които компютърът може да разбере. Perl е включил повечето от Operaторове от език C. Perl има много оператори в сравнение с други езици за програмиране. Operator са категоризирани като аритметични, логически, релационни и оператори за присвояване.

аритметика Operaторове:

Аритметичните оператори са тези, които могат да се използват за извършване на някои основни математически операции. Тези аритметични оператори са двоични оператори, при които се нуждаем от два аргумента, за да изпълним основна операция. Можем също да използваме унарни оператори за други основни операции; можете да видите разликата в примерите по-долу.

OperaTor Descriptйон Пример

+

Операция за добавяне, използвана за добавяне на две стойности или променливи

държащи ценности

$x=5+6; # или

$y=6;

$z=$x+$y;

-

Оператор за изваждане, използван за изваждане на две стойности или променливи, съдържащи стойности

$x=6-5; # или

$y=6;

$z=$x-$y;

*

Оператор за умножение, използван за умножение на две стойности или променливи, съдържащи стойности

$x=6*5; # или

$y=6;

$z=$x*$y;

/

Оператор за деление, използван за разделяне на две стойности или променливи, съдържащи стойности

$x=36/6; # или

$y=6;

$z=$x/$y;

**

Експоненциалният оператор, използван за предоставяне на експонента и получаване на стойността.

Пример: 22 = 43 = 27

$x=5**5; # или

$x=4;

$y=2;

$z=$x**$y;

%

Оператор на модула, използван за получаване на напомнянето по време на разделяне на две стойности или променливи, съдържащи стойности

$x=5%2; # или

$x=10;

$y=2;

$z=$x % $y;

++

Унарен оператор за добавяне за увеличаване на стойността на променлива с 1

$x=5;

$x++;

Or

++$x;

-

Оператор за унарно изваждане за намаляване на стойността на променлива с 1

$x=5;

$x–; # намаление на публикация

Or

–$x;# предварително намаление

Пример за изпълнение на всички горепосочени операции.

my $x=10;
my $y=2;
my $z;
$z=$x+$y;
print ("Add of $x and $y is $z \n");
$z=$x-$y;
print ("Sub of $x and $y is $z \n");
$z=$x*$y;
print ("Mul of $x and $y is $z \n");
$z=$x/$y;
print ("Div of $x and $y is $z \n");
$z=$x**$y;
print ("Exp of $x and $y is $z \n");
$z=$x%$y;
print ("Mod of $x and $y is $z \n");

Изход:

Събирането на 10 и 2 е 12

Под 10 и 2 е 8

Мул от 10 и 2 е 20

Разделението на 10 и 2 е 5

Опит от 10 и 2 е 100

Mod от 10 и 2 е 0

Задание Operaторове:

Операторите за присвояване просто присвояват стойности на променливи, но има още нещо, което трябва да запомним тук, операторите за присвояване също ще извършват аритметични операции и ще присвояват новата стойност на същата променлива, върху която се извършва операцията.

OperaTor Descriptйон Пример

+=

Оператор за добавяне, използван за добавяне и присвояване на стойност на една и съща променлива

$x=4;

$x+=10;

-=

Оператор за изваждане, използван за изваждане и присвояване на стойност на една и съща променлива

$x=4;

$x-=10;

*=

Оператор за умножение, използван за добавяне и присвояване на стойност на една и съща променлива

$x=4;

$x*=10;

/=

Оператор за деление, използван за разделяне и присвояване на стойност на една и съща променлива

$x=4;

$x/=10;

** =

Експоненциален оператор, използван за получаване на експонента и присвояване на стойност на една и съща променлива

$x=4;

$x**=10;

%=

Оператор на модула, използван за получаване на напомняне по време на деление и присвояване на стойност на същата променлива

$x=10;

$x%=4;

Пример за изпълнение на всички горепосочени операции.

my $x=10;
$x+=5;
print("Add = $x\n");
$x-=5;
print("Sub= $x\n");
$x*=5;
print("Mul = $x\n");
$x/=5;
print("Div = $x\n");

Изход:

Добавете = 15

Под= 10

Mul = 50

Div = 10

Логически и релационни Operaторове:

Perl използва логически оператори за сравняване на числа и низове. През повечето време логическите оператори се използват в условни изрази.

Логически и релационни Operators в Perl

Логически и релационни Operators в Perl

OperaTor Descriptйон

== или екв

Operator се използва за проверка дали двете променливи са равни

!=Или не

Operator се използва за проверка дали двете променливи не са равни

> или gt

Operator се използва за проверка дали

A е по-голямо от B

<or lt

Operator се използва за проверка дали

A е по-малко от B

>=или ge

Operator се използва за проверка дали

A е по-голямо или равно на B

<=или le

Operator се използва за проверка дали

A е по-малко или равно на B

|| или или

Operator се използва за проверка дали A или B притежава стойност

&&или и

Operator, използван за проверка на стойността на задържане на A и B

Нека вземем пример, където можем да обясним всички сценарии.

my $x=5;
my $y=5;
if($x == $y){
print ("True -- equal $x and $y \n");
}
else{
print ("False -- not equal $x and $y\n");
}
$x=6;
$y=7;
if($x != $y){
print ("True -- not equal $x and $y\n");
}
else{
print ("False -- equal $x and $y\n");
}
if($y > $x){
print ("True -- $y greater than $x\n");
}
else{
print ("False -- $y greater than $x\n");
}
if($x < $y){
print ("True -- $x less than $y\n");
}
else{
print ("False -- $x less than $y\n");
}
if($x <= $y){
print ("True -- $x less than $y\n");
}
else{
print ("False -- $x less than $y\n");
}
if($y >= $x){
print ("True -- $y greater than $x\n");
}
else{
print ("False -- $y greater than $x\n");
}

Изход:

Вярно — равно на 5 и 5

Вярно - не е равно на 6 и 7

Вярно - 7 по-голямо от 6

Вярно - 6 по-малко от 7

Вярно - 6 по-малко от 7

Вярно - 7 по-голямо от 6

Можете да видите примери за логически оператори в следващите раздели.

Специални променливи на Perl

Какво представляват специалните променливи на Perl?

Специалните променливи в Perl са тези, които имат някакво предварително дефинирано значение. Тези променливи са обозначени или с истинско име, или с препинателни знаци. Имаме специална променлива за всички поддържани от Perl променливи като скаларни специални променливи, специални променливи за масиви, специални променливи за хеширане. Повечето от специалните променливи, които използваме, са от скалари.

Когато искаме да използваме специалната променлива с нейното име, тогава трябва да заредим Perl модул „използвайте английски“, за да кажем изрично на интерпретатора на Perl, че ще използваме специални променливи, използвайки неговото име.

Скаларни специални променливи

Променлив Descriptйон

$_$ARG

Това е променливата по подразбиране, която съхранява текущите стойности.

$0 или $PROGRAM_NAME

Съхранява името на файла на Perl скрипта.

$/

Разделителят на входния запис, това има стойност по подразбиране '\n', което е знак за нов ред

$.

Съдържа номера на текущия ред на файла, който се чете

$,

Разделител на изходното поле, използва се главно от командата print(). По подразбиране стойността на това е зададена на 0, можем да променим стойността на тази променлива.

$\

Разделител на изходния запис, стойността на тази променлива ще бъде празна; можем да присвоим произволна стойност на това, която ще бъде използвана от оператора print(), докато отпечатва изхода.

$#

Тази променлива се използва за изходен формат при отпечатване на числа.

$%$FORMAT_PAGE_NUMBER

Ще задържи номера на текущата страница на прочетения файл.

$=$FORMAT_LINES_PER_PAGE

Ще задържи дължината на текущата страница на прочетения файл.

$-$FORMAT_LINES_LEFT

Съдържа стойността на броя редове, останали за отпечатване от страницата.

$~$FORMAT_NAME

Име на формат: Съдържа формата на текущо избрания изход по подразбиране името на манипулатора на файла.

$^$FORMAT_TOP_NAME

Съдържа стойността на формата на заглавието на файловия манипулатор, по подразбиране стойността ще бъде _TOP, последвана от име на файлов манипулатор.

$|$OUTPUT_AUTOFLUSH

По подразбиране е нула; това се използва за изчистване на изходния буфер след всеки write() или print().

$$

Ще съдържа номера на изпълнявания процес на интерпретатора на Perl.

$?

Код на състоянието: Тръбно и системно повикване. Състоянието на връщане на изпълнената команда.

$&$МАЧ

Използва се в регулярни изрази, това ще съдържа низ от последното успешно съвпадение на шаблон.

$`$ПРЕДМАЧ

Използва се в регулярни изрази, това ще съдържа низ, предшестван от последното успешно съвпадение на шаблон.

$'$POSTMATCH

Използва се в регулярни изрази, това ще съдържа низ, последван от последното успешно съвпадение на шаблон.

$+$LAST_PAREN_MATCH

Съдържа низа от последната скоба, който съответства на последното търсене по шаблон.

$

$1, $2, $3 …. Съдържа стойностите на шаблона, съответстващи по ред.

$[

Първи индекс: масив, подниз.

$]

Версия на Perl.

$”

Разделителят, използван за елементите на списъка, по подразбиране е празно пространство.

$;

Долен разделител, използван в многомерни масиви

$!

В цифров контекст отпечатва номера на грешката. В контекст на низ, отпечатайте грешката.

$@

Ще съдържа информация за синтактична грешка, използвана, когато се използва eval().

$<

Съдържа истинския UID (потребителски идентификатор) на процеса, изпълняващ скрипта.

$>

Съдържа ефективния UID на процеса, изпълняващ скрипта.

$(

Съдържа истинския GID (идентификационен номер на група) на процеса, изпълняващ скрипта.

$)

Съдържа ефективния GID на процеса, изпълняващ скрипта.

$^D$ОТСТРАНЯВАНЕ НА ГРЕШКИ

Съдържа текущата стойност на флаговете за отстраняване на грешки.

$^C

Задържа текущата стойност на флага, когато се използва ключ на командния ред –c.

$^F

Максималният системен файлов дескриптор по подразбиране е зададен на 2

$^I$INPLACE_EDIT

Съдържа стойността на ключа на командния ред –i.

$^M

Специален пул памет може да се използва, когато Perl скриптът умре с грешка при липса на памет.

$^O$OSNAME

Operating системната информация се съхранява. „Linux“ за Linux системи, „mswin32“ за Windows системи.

$^T$BASETIME

Времето, когато скриптовете се изпълняват в секунди.

$^W$ПРЕДУПРЕЖДЕНИЕ

Текущата стойност на превключвателя на командния ред –w. Превключвател за предупреждение.

$ARGV

Име на текущия файл, когато се използва <>.

Специални променливи за масиви:

Променлив Descriptйон

@INC

Съдържа списък с пътища, където могат да се разглеждат модули или скриптове на Perl библиотека, докато се изпълнява текущият скрипт. Този @INC се използва от изрази за използване и изискване за разглеждане на тези пътища за библиотечни модули.

@ARGV

Съхранява предадените аргументи на командния ред.

@_

Използва се в подпрограми, докато предава параметрите на подпрограмите.

@F

Това е масивът, в който се съхраняват входните редове при автоматично разделяне –a (използва се превключвател на командния ред).

Хеш специални променливи:

Променлив Descriptйон

% INC

Името на файла ще бъде ключовете; стойностите ще бъдат пътя до тези файлове. Използва се от do, use и require.

%ENV

Системни променливи на околната среда.

%SIG

Signals манипулатор.

Perl регулярен израз

Какво е регулярен израз?

Регулярният израз на Perl е достатъчно силен в съпоставянето на моделите на низове в изрази или група от изрази. Регулярните изрази се използват най-вече при анализиране на текст, съпоставяне на шаблони и много други въз основа на изискването. Имаме определени оператори, които се използват специално от свързване на образец на регулярен израз =~ и !~. Това са оператори за тестване и присвояване.

Регулярен израз Operaтори

Регулярен израз Operators в Perl

Регулярен израз Operators в Perl

  • Съвпадение на Perl — m//
  • Заместител на Perl – s///
  • Perl Transliterate – tr///

Преди да продължим, трябва да знаем няколко неща за регулярния израз; има определени неща като мета символи, заместващи знаци в синтаксиса на Perl Regex.

Овъглявам Значение

\

Специално или цитат

*

Съвпадение на 0 или повече знаци

+

Съвпадение на 1 или повече знаци

?

Съвпадение на 0 или 1 знак

|

Може да се използва за съчетаване на алтернативни модели

()

Използва се за съхраняване на съвпадащия шаблон

[]

Може да се предава набор от знаци. Използва се специално за цифри и азбуки.

{}

Използва се за предоставяне на броя пъти, в които мачът може да бъде изпълнен.

^

Начало на низа

$

Край на низ

\w

Използва се за съпоставяне на един знак или дума, която може да бъде буквено-цифрова, включително „_“

\W

Съвпадение с нещо различно от буквено-цифрови

\s

Използва се за съпоставяне на празни интервали

\S

Съвпада с всичко, различно от интервал

\d

Сравнете числата. Не десетични стойности и отрицателни стойности

\D

Свържете всичко друго освен числа.

\t

Съвпадение на табулаторно пространство

\n

Съвпадение на нов ред

Горните са набор от знаци, които могат да се използват по време на съвпадение на шаблони.

Нека видим няколко примера.

Да разгледаме ситуация, при която потребителят въвежда някакъв вход по време на изпълнение на скрипта и ние искаме да проверим дали потребителят е въвел някакво име като вход или не. Трябва да напишем синтаксис на регулярен израз, за ​​да извлечем вашето име и да го отпечатаме.

my $userinput="Guru99 Rocks";
if($userinput=~m/.*(Guru99).*/)
{
	print "Found Pattern";
}
else
{
	print "unable to find the pattern";
}

Изход:

Намерен модел

Тук сме написали регулярния израз като /.*(Guru99).*/.* съответства на всички символи в низ. A '.' в perl regex match се отнася до всеки знак, включително интервал.

Нека видим как точно можем да конструираме Regex.

Помислете за пример на низ от множество думи и цифри и специални символи като този „Здравейте на всички, това е моят номер: +91-99298373639“;

Regex: /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i

Дума пространство дума пространство дума пространство дума пространство дума пространство дума интервал специален знак: интервал специален знак+цифри специален знак –цифри.

Съвпадение на Perl Operaтори

Операторите за съпоставяне се използват за съпоставяне на низ в рамките на някакъв израз или в променлива.

my $var="Hello this is perl";
if($var=~m/perl/)
{
	print "true"; 
} 
else
{
	print "False"; 
}

Изход:

вярно

Този малък код ще отпечата "вярно", тъй като съвпадението на шаблона на perl идентифицира низа в променлива. По принцип Perl търси текста, предоставен в // в целия низ, дори и да намери на едно място, ще върне 'true'. Моделът може да бъде навсякъде в променливата. Можем да опитаме да заменим =~ с !~, за да видим разликата между тези два оператора.

Замяна на Perl OperaTor

Този оператор може да се използва за търсене и замяна на всеки знак с нула или друг знак.

my $a="Hello how are you";
$a=~s/hello/cello/gi;
print $a;

Изход:

виолончело как си

Забележка: Всъщност можем да използваме всеки низ за съвпадение на шаблон, както направихме по-рано и в този оператор за заместване. Тук използвахме 'gi', g-глобално, i-игнориране на малки и големи букви.

Превод на Perl OperaTor

Това е подобно на заместването, но не използва регулярни изрази на perl, по-скоро можем директно да предадем стойността или думата, която искаме да заменим.

my $a="Hello how are you";
$a=~tr/hello/cello/;
print $a;

Изход:

Здравей крава си

I/O на файлове на Perl

Perl е проектиран да манипулира ефективно файлове и I/O операции. Основното предимство на Perl е в разбора на файлове и обработката на файловете. Има много вградени функции и оператори, използвани по време на работа с файлове в Perl.

По принцип файловите операции, които се извършват с Perl, се извършват с помощта на FILEHANDLE. Трябва да дефинираме този FILEHANDLE по време на отварянето на файл за четене или запис.

В този урок за скриптове на Perl ще научите-

Perl Отворете файл

Можем да отворим файл с помощта на функцията open(), налична в Perl.

open(FILEHANDLE, "filename or complete path of the file");

Сега отворихме файл, сега възниква въпрос. За четене ли е или за писане?

Perl файл за четене и файл за запис на Perl

Perl има определени режими, които трябва да се използват за четене, запис или добавяне на файл.

Read – open(my $fh,"<filename or complete path of the file"); 
Write – open(my $fh,">filename or complete path of the file");
Append – open(my $fh,">>filename or complete path of the file");

Няколко примера за четене на файл:

Четене на файл в Perl

Да приемем, че имаме perl файл с име file.txt и има няколко реда текст в него. Трябва да отворим този файл и да го отпечатаме.

open(FH,"<file.txt"); 
while(<FH>)    # Looping the file contents using the FH as a filehandle. 
{
	print "$_";
}
close FH;

or

open(FH,"<file.txt"); 
my @content=<FH>; # specifying the input of the array is FH.
foreach(@content)
{
	print "$_";
}
close FH;

Това ще отпечата съдържанието на файла на изходния екран.

Сега ще напишем програма за създаване и запис на данни в perl файл.

Писане на файл в Perl

open(FH,">test.txt");
my $var=<>;
print FH $var;
close FH;

Това ще запише входа, предоставен по време на изпълнение, и ще създаде файл test.txt, който ще има вход.

Горният начин винаги ще се опитва да създаде файл с име test.txt и записва входа във файла; ще напишем същото, за да добавим файла.

Операция за добавяне на файл в Perl

open(FH,">>test.txt");
my $var=<>;
print FH $var;
close FH;
Режими Descriptйон

<

Чети

+<

Чете и пише

>

Създава, записва и съкращава

+>

Четете, пишете, създавайте и съкращавайте

>>

Пише, добавя и създава

+>>

Четете, пишете, добавяйте и създавайте

Сега трябва да видим как да четем, пишем и добавяме файлове, използвайки основни примери.

Ще видим още няколко примера и други функции, които помагат да разберем повече за файловете.

Perl Кажи

Този метод ще върне текущата позиция на FILEHANDLER в байтове, ако е посочено друго, ще счита последния ред за позиция.

open(FH, "test.pl");
while(<FH>)
{
	$a=tell FH;
	print "$a";
}

Търсене на Perl

Функцията за търсене е подобна на системното извикване fseek. Този метод се използва за позициониране на указателя на файла към конкретно местоположение чрез указване на байтовете, последвани от началото или края на указателя на файла.

seek FH, bytes, WHENCE;

WHENCE е позицията на началния показалец на файла. Zero ще го зададе от началото на файла.

Пример: Нека input.txt има някои данни като „Здравей, това е моят свят.“

open FH, '+<','input.txt';
seek FH, 5, 0;    # This will start reading data after 5 bytes.
$/ = undef;
$out = <FH>;
print $out;
close FH;

Изход:

това е моят свят

Perl Unlink

Unlink се използва за изтриване на файла.

unlink("filename or complete file path");

Справяне с директории:

Можем също така да обработваме директории, чрез които можем да обработваме множество файлове.

нека да видим как да отворите директория. Можем да използваме методите opendir и readdir.

opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler.

while(readdir(DIR)) # loop through the output of readdir to print the directory contents.
{
   print "$_\n";
}
closedir(DIR); #used to close the directory handler.

or

opendir(DIR,"C:\\Program Files\\");
@content=readdir(DIR);
foreach(@content)
{
	print "$_\n";
}
closedir(DIR);

Това ще отпечата всички налични файлове в тази директория.

Файлови тестове на Perl и тяхното значение

-r

За да проверите дали файлът/директорията може да се чете от текущия потребител/група

-w

За да проверите дали файлът/директорията може да се записва от текущия потребител/група

-x

За да проверите дали файлът/директорията е изпълним от текущия потребител/група

-o

За да проверите дали файлът/директорията е собственост на текущия потребител

-R

За да проверите дали файлът/директорията може да се чете от този реален потребител/група

-W

За да проверите дали файлът/директорията може да се записва от този реален потребител/група

-X

За да проверите дали файлът/директорията е изпълним от този реален потребител/група

-O

За да проверите дали файлът/директорията е собственост на този реален потребител

-e

За да проверите дали името на файл/директория съществува

-z

За да проверите дали файлът съществува и има нулев размер (винаги невярно за директории)

-f

За да проверите дали Entry е обикновен файл

-d

За да проверите дали Entry е директория

-l

За да проверите дали Entry е символна връзка

-S

За да проверите дали Entry е сокет

-p

За да проверите дали Entry е канал с име („FIFO“)

-b

За да проверите дали Entry е блоков специален файл (като монтируем диск)

-c

За да проверите дали Entry е файл със специални символи (като I/O устройство)

-u

За да проверите дали файлът или директорията са setuid

-g

За да проверите дали файлът или директорията са setgid

-k

За да проверите дали файлът или директорията имат зададен лепкав бит

-t

Даденият манипулатор на файла е TTY (тъй като чрез системната функция isatty(), имената на файловете не могат да бъдат тествани от този тест)

-T

За да проверите дали файлът изглежда като „текстов“ файл

-B

За да проверите дали File изглежда като „двоичен“ файл

-M

За да проверите възрастта на модификацията (измерена в дни) на файла

-A

За да проверите възрастта на достъп (измерена в дни) на файла

-C

За да проверите възрастта на модификацията на Inode (измерена в дни) на файла

Подпрограма Perl

Какво е подпрограма?

Подпрограми са подобни на функциите в други езици за програмиране. Вече използвахме някои вградени функции като print, chomp, chop и т.н. Можем да напишем наши собствени подпрограми в Perl. Тези подпрограми могат да бъдат написани навсякъде в програмата; за предпочитане е да поставите подпрограмите или в началото, или в края на кода.

Подпрограма в PERL

Пример за подпрограми

sub subroutine_name 
{
	Statements…;    # this is how typical subroutines look like.
}

След като вече знаем как да напишем подпрограма, как да получим достъп до нея?

Трябва да осъществим достъп или да извикаме подпрограма, като използваме името на подпрограмата с префикс „&“ символ.

sub display
{
	print "this is a subroutine";
}
display();    # This is how we call a subroutine

Предаване на Perl параметри и Perl аргументи

Подпрограмите или perl функцията са написани, за да поставят повторно използваемия код в него. По-голямата част от кода за многократна употреба изисква параметри да бъдат предадени на подпрограмата. Тук ще научим как можем да предаваме аргументи на подпрограмата.

sub display
{		
	my $var=@_; # @_ is a special variable which stores the list of arguments passed.		
	print "$var is the value passed";		
}		
display(2,3,4);    #this is how we need to pass the arguments.

Изход:

3 е предадената стойност

@_ е специална масивна променлива, която съхранява аргументите, предадени на подпрограмите.

Perl Shift

Можем също да използваме ключова дума 'shift', която премества параметър по един към променлива или $_[0],$_[1]… което е отделен елемент от @_ масива

sub display
{		
my $var=shift;		
print "$var is passed";		
}		
display("hello");

Изход:

здравей е предадено

Подпрограмите обикновено се използват в обектно-ориентираното програмиране, а също и на места, където можете да поставите повече код за многократна употреба.

Основната функционалност на подпрограмите е да извършат някаква задача и да върнат резултата от повторно използваемия код.

Урок за PERL за начинаещи - Пълно ръководство

Можем да върнем стойност от подпрограма, използвайки ключовата дума return.

sub add
{
my $a=shift;
my $b=shift;
return($a+$b);
}
my $result=add(5,6);
print $result;

Изход:

11

$result ще съдържа стойността на добавените $a и $b.

Можем също така да предадем хешове и масив директно към подпрограмата.

sub hash
{
my %hash=@_;
print %hash;
}
%value= ( 1=>'a', 2=>'b');
&hash(%value);

Изход:

1a2b

Можем също да върнем хеш или масив.

sub hashArray
{
my %hash=@_;
print "Inside Sub-routine";
print %hash;
return(%hash);
}
%hash=(1=>'a', 2=>'b');
my(@ret)=hashArray(%hash);
print "After Sub-routine call";
print @ret;

Изход:

Вътре в подпрограма 2b1a след извикване на подпрограма 2b1a

Perl формат

Perl има механизъм, чрез който можем да генерираме отчети. Използвайки тази функция, можем да правим отчети точно както искаме, докато печатаме на екрана за изход или във файл. Един прост формат може да бъде написан с помощта на функциите printf или sprintf, налични в Perl.

printf "%05d\n", 30;

Това ще включва водещи нули пред число 30, което прави общ брой цифри до 5. Същото може да се използва за sprintf.

sprintf "%05d\n", 30; # This will print the same as printf.

Използвайки printf и sprintf, можем да получим повечето формати на Perl. В случай на доклади ще бъде трудно за изпълнение.

Perl формат

Пример за отчет:

================================================== =========================
Име Адрес Възраст Тел
================================================== =========================
Krishna Ченай 24 929309242
Shruthi Chennai 24 929309232

Горното е примерен отчет, който трябва да отпечатаме по същия начин в Perl. Това може да се постигне чрез използване на perl printf и perl sprintf. Може ефективно да се приложи с помощта на формат.

Форматът може да бъде деклариран по следния начин.

format FORMATNAME=FORMATLIST.

Тук ще използваме конкретен метод за запис, за да отпечатаме данните на изходния екран или във файла.

символ Descriptйон

@

Използва се за представяне на началото на държача на полето

>

Дясно подравняване на текста

<

Ляво подравняване на текста

|

Централно подравняване

#

Цифрови, ако са предоставени няколко #. Приема се като коментар, ако е предоставен един #

.

Десетична запетая

^

Началото на носителя на поле може да се използва и за многоредов, а също и за пренасяне на думи

~

Редът трябва да е празен, ако променливата е празна

@*

Множество редове.

($name,$addr,$age,$phone)=("krishna","chennai","24","929309242"); 
write;
($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); 
write; 
format STDOUT_TOP= 
=============================================================== 
NAME ADDRESS AGE PHONE 
===============================================================
 . 
format STDOUT= 
@<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< 
$name, $addr, $age, $phone 
.

Изпълнете кода, за да видите резултата.

Използваме символа @, за да посочим началото на притежателя на полето или низа, '<' всеки знак.

Използваме STDOUT за печат на стандартния изход. Можем да променим това на файлов манипулатор, който използваме за запис на данни във файла.

open(REPORT,">test.txt"); 
($name,$addr,$age,$phone)=("krishna","chennai","24","929309232"); 
write REPORT; 
($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); 
write REPORT; 
format REPORT_TOP= 
=============================================================== 
NAME ADDRESS AGE PHONE 
===============================================================
 . 
format REPORT= 
@<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< 
$name, $addr, $age, $phone

Можем да заменим '<' с '>' или '|' за промяна на подравняването на текста. STDOUT_TOP се използва за проектиране на заглавката на формата. Можем също да използваме същото с манипулатора на файлове, използвайки FH_TOP (FH е манипулаторът на файлове). Това ще изведе формата към файла, който работим на.

Стандарти за кодиране на Perl

Всеки програмист ще има собствено усещане за писане на кода, използвайки определени стандарти; тези стандарти трябва да са достатъчно познати, така че другите програмисти да могат да разберат и поддържат правилно кода.

Стандарти за кодиране в Perl

Стандарти за кодиране в Perl

Писането на код е просто и лесно. Проблемът възниква, когато трябва да се поддържа на по-късни етапи. При писането на кода трябва да се следват правилните насоки и стандарти за кодиране. Perl също дефинира определени стандарти, които ще бъдат полезни за програмистите при писане на код. Препоръчително е да заредите „strict“ и „warnings module“, докато пишете кода. Всеки от тези модули има своя собствена важност. Strict ще ни накара да декларираме променливата преди да я използваме и също така ще ни каже дали във вашия код присъства някаква гола дума. Модулът за предупреждения може алтернативно да се използва чрез предаване на опцията '-w' на интерпретатора на Perl в shebang. Предупрежденията ще се отпечатат на изходния екран.

#!/usr/bin/perl –w

По-долу има няколко списъка със стандарти.

  • Използвайте модула „стриктно“ и „предупреждения“.
  • Премахнете променливата, която не се използва.
  • Имената на променливите трябва да са разбираеми за другите потребители. Пример: $name, @fileData и др.
  • Необходима е документация, докато кодирате скрипт.
  • Не кодирайте никакви стойности, по-скоро опитайте да ги извлечете динамично или помолете потребителя да въведе по време на изпълнение. (Път на файла, имена на файлове).
  • Увеличете максимално повторното използване на кода. Опитайте се да поставите кода за многократна употреба в подпрограми.
  • Това означава, че за подпрограмите трябва да се дадат пълни имена.
  • Подпрограмите трябва да бъдат написани с подходящи коментари и документация.
  • Винаги инициализирайте променливите.
  • Винаги проверявайте кодовете за връщане за системни повиквания. Отварянето на файл може или не може да се случи, наличието на код за връщане тук ще покаже състоянието на грешката, ако файлът не съществува.

    Пример: отворено (FH,

  • Подпрограмата винаги трябва да връща стойност.
  • Отворете къдраво в същия ред.
  • Един ред BLOCK може да бъде поставен в един ред с къдраво.
  • Използвайте етикети по време на LOOPS, ще бъде лесно да излезете от цикъла, когато е необходимо.
  • Използвайте долна черта, докато дългите фрази от думи са написани като име на променлива или подпрограма.
  • Опитайте се да използвате прост регулярен израз, докато кодирате.

Перфектен пример със стандарти за кодиране:

#######################################################################
Program to read the file content
# Date: 22-2-2013
# Author : Guru99
########################################################################
#!/usr/bin/perl 
use strict;
use warnings; 
my $line;
open FR, "file.txt" || die("Cannot open the file $!");
while ($line=<FR>) 
{   
	print $line;
} # Looping file handler to print data

Обработка на грешки в Perl

Какво е изключение?

Изключение е събитие, настъпило по време на изпълнение на програмата, което ще спре или прекрати вашата програма.

грешка при обработка на

Обработването на грешки е нещо, за което всеки програмист трябва да се грижи по време на програмиране. Perl също предоставя техники за обработка на грешки, с които можем да уловим грешката и да я обработим по съответния начин.

Обработка на грешки в Perl

Обработка на грешки в Perl

Има много начини да проверите за грешки в програмата. Трябва да разгледаме кодовете за връщане на функцията, която използваме. Ако успеем да обработваме правилно тези кодове за връщане, тогава повечето от обработката на грешките могат да бъдат постигнати.

Какво ще се върне в случай на системни повиквания?

В случай на системни извиквания, състоянието на връщане ще се съхранява в две специални променливи $? И $!

$! – Това ще улови номера на грешката или номера на грешка, свързан със съобщението за грешка.

$? – Това ще задържи функцията за връщане на състоянието system().

Използване на Perl оператор или логически

Можем да използваме логически или оператор за обработка на грешки, докато използваме системни повиквания.

пр:

open(FH,"<test.txt");

Това ще отвори файла в режим на четене, ако файлът съществува.

Ами ако файлът липсва?

open(FH,"<test.txt") or die("File not exists $!"); # This will perl exit the program if the file not exists. 
open(FH,"<test.txt") or warn ("File not exists $!"); # This will print a warning message on STDERR

Perl Eval

Функцията Eval може да обработва фатални грешки, грешки по време на компилиране, грешки по време на изпълнение и тези грешки, които прекратяват кода ви в даден момент.

Функцията Perl Eval може да има блок от код или израз. Evals разглежда всичко поставено в него като низ.

Помислете за ситуация на извикване на подпрограма, която не е дефинирана в скрипта. В тази ситуация скриптът завършва с посочване на „недефинирана подпрограма &XYZ, тази грешка може да бъде обработена във функцията eval.

Има много употреби на блока evals; едно такова използване е, когато искаме да заредим модула, който е специфичен за операционната система по време на изпълнение.

Пример: Разделянето на нула причинява фатална грешка; за да се справим с това, можем да поставим кода в блока evals.

$a=5; 
$b=0; 
eval 
{ 
 '$result=$a/$b'; 
} 
if($@)
{
 print "$@";    # All the error codes returned by evals will get stored in $@. 
}

Изход:

синтактична грешка в C:\Users\XYZ\Text.pl ред 8, близо до “)

{“

Изпълнението на C:\Users\XYZ\Text.pl е прекъснато поради грешки при компилиране.

Пример: eval с помощта на оператор perl die.

sub test 
{ 
die "Dieing in sub test \n"; 
} 
eval 
{ 
test(); 
}; 
print "Caught : $@\n";

Изход:

Хванат: Умира при подтест

Използване на Perl Опитайте

Perl не поддържа блокове с кодове try, catch и finally, както другите езици за програмиране. Все още можем да ги използваме, като заредим външен Perl модул.

използвайте Try::Tiny;

Използвайки това, можем да поставим вашия код в блока за опит и да хванем грешката в блока за предупреждение.

Вместо $@, използван в eval, Try::Tiny използва $_.

# обработка на грешки с catch манипулатор

try 
{ 
die "Die now"; 
} 
catch 
{ 
warn "caught error: $_"; # not $@ 
};

Използване най-накрая.

my $y;
try 
{ 
 die 'foo' 
}
finally 
{ 
    $y = 'bar' 
};

try 
{ 
    die 'Die now' 
} 
catch 
{ 
    warn "Returned from die: $_" 
} 
finally 
{ 
    $y = 'gone' 
};

Изход:

foo в C:\Users\XYZ\Text.pl ред 4.

Можем да използваме try, catch и finally по този начин.

опитайте { # изявление }

улов {# изявление}

finally { # statement };

Or

try 
{ 
# statement 
} 
finally 
{ 
# statement 
};

Изход:

Or

try 
{ 
# statement 
} 
finally 
{ 
# statement 
} 
catch 
{ 
# statement 
};

Изход:

Програмиране на Perl Socket

Какво е гнездо?

Урок за PERL за начинаещи - Пълно ръководство

Сокетът е среда, чрез която два компютъра могат да си взаимодействат в мрежа, като използват мрежов адрес и портове.

Да предположим, че A (сървър) и B (клиент) са две системи, които трябва да взаимодействат помежду си, използвайки Sockets за изпълнение на някои програми.

За да приложим това, трябва да създадем сокети както в A (сървър), така и в B (клиент), A ще бъде в състояние на получаване, а B ще бъде в състояние на изпращане.

A (Сървър):

Тук сървърът желае да получи връзка от B (клиент) и да изпълни някои задачи и да изпрати резултата обратно на B (клиент). Когато изпълним кода, операционната система в A се опитва да създаде сокет и свързва един порт към този сокет. След това ще слуша от подателя, който е B.

B (клиент).

Тук клиентът желае да изпрати някаква програма от своята система към A (сървър) за обработка. Когато изпълним кода, операционната система в B се опитва да създаде сокет за комуникация с A (сървър), B трябва да посочи IP адреса и номера на порта на A, към който B иска да се свърже.

Ако това върви добре, двете системи ще си взаимодействат, за да обменят информация през един порт. Perl също поддържа програмиране на сокет.

Perl има собствен API, чрез който могат да се внедряват сокети. За да улесним, има много CPAN модули, чрез които пишем сокет програми.

Сървърни операции:

  • Създаване на Socket
  • Свържете сокета с адрес и порт
  • Слушайте сокета на адреса на този порт
  • Приемете клиентските връзки, които се опитват да се свържат, използвайки порта и IP на сървъра
  • Извършвайте операции

Удовлетвореност Operaции:

  • Създаване на Socket
  • Свържете се със сървъра, като използвате адреса на неговия порт
  • Извършвайте операции

Клиентски сървър Operaции в Perl

socket.io

Това е един модул за програмиране на сокет, който е базиран на обектно ориентирано програмиране. Този модул не поддържа типа INET мрежа, използван в мрежите.

IO::Socket::INET:

Този модул поддържа INET домейн и е изграден върху IO::Sockets. Всички методи, налични в IO::Sockets, са наследени в INET модула.

Клиент и сървър, използващи TCP протокол:

TCP е протокол, ориентиран към свързване; ще използваме този протокол за програмиране на сокет.

Преди да продължим, нека видим как можем да създадем обект за IO::Socket::INET модул и да създадем сокет.

$socket = IO::Socket::INET->new(PeerPort => 45787, 
PeerAddr => inet_ntoa(INADDR_BROADCAST), 
Proto => udp,LocalAddr => 
'localhost',Broadcast => 1 )
or 
die "Can't create socket and bind it : $@n";

Новият метод в модула IO::Socket::INET приема хеш като входен параметър към подпрограмата. Този хеш е предварително дефиниран и ние просто трябва да предоставим стойностите на ключовете, които искаме да използваме. Има списък с ключове, използвани от този хеш.

PeerAddr

Адрес на отдалечен хост

PeerHost

Синоним на PeerAddr

PeerPort

Отдалечен порт или услуга

LocalAddr

Адрес за свързване на локален хост

Localhost

Синоним на LocalAddr

Локален порт

Порт за свързване на локален хост

Прото

Име на протокола (или номер)

Тип

тип Socket

Слушай

Размер на опашката за слушане

ReuseAddr

Задайте SO_REUSEADDR преди обвързване

повторна употреба

Задайте SO_REUSEADDR преди обвързване

ReusePort

Задайте SO_REUSEPORT преди обвързване

Предавания

Задайте SO_BROADCAST преди обвързване

Timeout

Стойност на изчакване за различни операции

MultiHomed

Опитайте всички адреси за многодомни хостове

Спиране

Определете дали връзката ще бъде в режим на блокиране

Server.pl

use IO::Socket; 
use strict; 
use warnings; 
my $socket = new IO::Socket::INET ( 
LocalHost => 'localhost', 
LocalPort => '45655', 
Proto => 'tcp', 
Listen => 1, 
Reuse => 1, 
); 
die "Could not create socket: $!n" unless $socket; 
print "Waiting for the client to send datan"; 
my $new_socket = $socket->accept(); 
while(<$new_socket>) { 
print $_; 
} 
close($socket);

Client.pl

use strict; 
use warnings; 
use IO::Socket; 
my $socket = new IO::Socket::INET ( 
PeerAddr => 'localhost', 
PeerPort => '45655', 
Proto => 'tcp', 
); 
die "Could not create socket: $!n" unless $socket; 
print $socket "Hello this is socket connection!n"; 
close($socket);

Забележка:

При програмирането на сокет ще трябва първо да изпълним Server.pl и след това client.pl поотделно в различни командни подкани, ако работим на локален хост.

Какво е Perl модули и пакети

Модулите и пакетите са тясно свързани помежду си и са независими. Пакет: Пакетът Perl е известен също като пространство от имена и има всички уникални променливи, използвани като хешове, масиви, скалари и подпрограми. Модул: Модулът е колекция от многократно използваем код, където пишем подпрограми в него. Тези модули могат да бъдат заредени в програми на Perl, за да се използват подпрограмите, написани в тези модули.

Какво представляват модулите на Perl?

Стандартните модули ще бъдат инсталирани по време на инсталирането на Perl на всяка система. CPAN: Цялостен Perl Archive Network – Глобално хранилище на Perl модули. Наши собствени персонализирани Perl модули, които могат да бъдат написани от нас. По принцип модулът, когато се зареди във всеки скрипт, ще експортира всички свои глобални променливи и подпрограми. Тези подпрограми могат директно да извикват, сякаш са декларирани в самия скрипт. Модулите на Perl могат да бъдат записани с разширение .pm към името на файла Пример: Foo.pm. Модул може да бъде написан с помощта на 'package Foo' в началото на програмата.

Основен модул на Perl:

#!/usr/bin/perl 
package Arithmetic; 
sub add 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b);
} 
sub subtract 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b); 
} 
1;

Няма изход

За да използваме този Perl модул, трябва да го поставим в текущо работеща директория.

Можем да заредим Perl модул с помощта на require или use навсякъде в кода. Основната разлика между изискване и използване е изискване на зареден модул по време на изпълнение и използване на зареждания по време на компилиране.

#!/usr/bin/perl
require
Arithmetic;
print Arithmetic::add(5,6);
print Arithmetic:: subtract (5,6);

Тук, в горния пример, ние осъществяваме достъп до подпрограмите, използвайки напълно квалифицирано име на модул.

Можем също да получим достъп до пакета с помощта на „използване на аритметика“.

износител:

Този модул има функционалност по подразбиране за импортиране на методи.

#!/usr/bin/perl 
package Arithmetic; 
require Exporter; 
@ISA= qw(Exporter); # This is basically for implementing inheritance. 
@EXPORT = qw(add); 
@EXPORT_OK = qw(subtract); 
sub add 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b); 
} 
sub subtract 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b);
 } 
1;

Масивът @EXPORT може да се използва за предаване на списък от променливи и подпрограми, които по подразбиране ще бъдат експортирани към извикващия модул на модула.

Масивът @EXPORT_OK може да се използва за предаване на списък с променливи и подпрограми, които ще бъдат експортирани при поискване, където потребителят трябва да посочи, докато зарежда модула.

#!/usr/bin/perl 
use 
Arithmetic qw(subtract); 
print add(5,6); 
print subtract (5,6);

По подразбиране подпрограмата за добавяне ще бъде експортирана. Методът на изваждане няма да бъде експортиран, ако не е указан при зареждането на модула.

Обектно ориентирано програмиране в Perl

В този раздел ще научим как да създаваме Perl обектно ориентирани модули. Първо, нека видим какъв е обектът? Обектът е екземпляр, чрез който можем да имаме достъп, да модифицираме и да локализираме някои данни във всеки Perl модул. Това не е нищо друго освен да накарате вашия съществуващ Perl пакет, променливи и подпрограми да действат като клас, обекти и методи по отношение на други езици за програмиране.

Създаване на клас

Вече знаем как да създаваме модули от предишната тема. Целта на класа е да съхранява методи и променливи. Един Perl модул ще има подпрограми, които са методи. Трябва да имаме достъп до тези променливи и обекти на подпрограми.

Perl конструктор

Конструкторът в Perl е метод, който ще изпълни и ще ни върне препратка с името на модула, маркирано към препратката. Това се нарича благославяне на класа. Използваме определена променлива за благословение на perl клас, която е bless.

#!/usr/bin/perl 
package Arithmetic; 
sub new 
{ 
my $class=shift;
my $self={}; 
bless $self, $class; 
return $self; 
} 
sub add 
{ 
my $self= shift; 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b); 
}
sub subtract 
{ 
my $self= shift; 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b); 
} 
1;

Новият метод, използван като конструктор за клас, Този конструктор ще създаде обект за нас и ще се върне към скрипта, който извиква този конструктор.

#!/usr/bin/perl
use Arithmetic;
my $obj= Arithmetic->new(); 
my $result= $obj->add(5,6); 
print "$result";
$result = $obj->subtract(6,5);
print "$result";

Тук трябва да разберем как е създаден обектът. Всеки път, когато се опитваме да създадем обект за класа, трябва да използваме пълното име на класа. Да предположим, че класът perl се намира в някакъв lib\Math\Arithmetic.pm. И ако искаме да имаме достъп до този perl клас от директорията lib, тогава трябва да предоставим целия път до класа, докато извикваме скрипта.

използвайте lib::Math::Arithmetic;

my $obj = lib::Math::Arithmetic->new();

Ето как се случва създаването на обект в Perl.

@INC:

Как Perl скриптът знае къде съществува библиотечен модул? Perl знае само за текущата директория на скрипта и пътя на вградената библиотека на Perl. Всеки път, когато използваме Perl модул, който не се намира в текущата директория или път на библиотека Perl, скриптът винаги ще се провали. Относно @INC, това е масив, който съдържа всички пътища на директория, където трябва да търси модулите на Perl. Опитайте да изпълните тази команда и вижте какъв ще бъде резултатът.

perl –e "print @INC"

Това ще даде някакъв резултат и това е пътят, където модулите на lib ще бъдат налични. Всеки път, когато използваме нов библиотечен модул, трябва да кажем на Perl, интерпретатора, да погледне това конкретно място, където Perl модулът е наличен.

push(@INC, "PATH TO YOUR MODULE");

Направете това като първи ред код. Това ще каже на вашия преводач да разгледа този Път. или употреба

lib Arithmetic; # List here is your Perl Module location

Perl деструктор

Деструкторът на обект по подразбиране се извиква в края и преди вашия скрипт да излезе. Това се използва за унищожаване на вашите обекти от паметта.


PERL V/s Shell Scripting

Въведение в програмирането на PERL

  • Програмирането в Perl не създава проблеми с преносимостта, което е често срещано при използване на различни обвивки в скриптове на обвивки.
  • Обработката на грешки е много лесна в Perl
  • Можете лесно да пишете дълги и сложни програми на Perl поради неговата необятност. Това е в контраст с Shell, който не поддържа пространства от имена, модули, обекти, наследяване и т.н.
  • Shell разполага с по-малко налични библиотеки за многократна употреба. Нищо в сравнение с CPAN на Perl
  • Shell е по-малко сигурен. Извиква външни функции (команди като mv, cp и т.н. зависят от използваната обвивка). Напротив, Perl върши полезна работа, докато използва вътрешни функции.

Как се използва PERL при автоматизирано тестване

Perl се използва широко в автоматизацията. Може да не е най-добрият програмен език в света, но е най-подходящ за определени видове задачи. Нека обсъдим къде и защо се използва Perl Тестване на автоматизацията.

Тестване на съхранение

Тестване на съхранение с помощта на Perl

Какво е съхранение? Данни, съхранявани във файлове.

Да предположим, че имаме свързано със съхранение Тестов случай където трябва да запишем данни на един дял, да ги прочетем и да проверим дали данните са записани правилно.

Това може да се направи ръчно, но може ли ръчен тестер да извърши същото 10000 XNUMX пъти? Ще бъде кошмар! Имаме нужда от автоматизация

Най-добрият инструмент за автоматизиране на всичко, свързано със съхранението, е Perl поради неговите техники за обработка на файлове, REGEX и мощен анализ на файлове, който отнема най-малко време за изпълнение в сравнение с други езици за програмиране.

Защо трябва да тестваме хранилището? Помислете за големи центрове за данни, където данните ще текат непрекъснато от една система към друга система с 1000 записа, които се съхраняват в секунда. Тестването на устойчивостта на такъв механизъм за съхранение е от съществено значение.

Много компании като HP, Dell, IBM и много производители на сървъри използват Perl като интерфейс за тестване на функционалността в домейни за съхранение и работа в мрежа. NetApp е една такава компания, която работи изцяло върху Storage и използва Perl като език за програмиране за автоматизиране на тестовите случаи.

Ако се интересувате от автоматизацията на Perl, би било препоръчително да научите за съхранение и работа в мрежа Concepts.

Тестване на сървър и мрежа:

Тестване на сървър и мрежа с помощта на Perl

Тестване на сървър и мрежа с помощта на Perl

PERL се използва широко при непрекъсната работа на сървъра и мониторинг на производителността.

Помислете за център за данни, който има 100 хоста (сървъра). От вас се изисква да се свържете с всеки хост, да изпълните някои команди от разстояние. Също така искате да рестартирате системата и да проверите кога ще се върне онлайн.

Ръчното изпълнение на тази задача за всички 100 хоста ще бъде кошмар. Но можем лесно да автоматизираме това с помощта на PERL

Проектирайте стъпки за постигане на тази по-горе автоматизация с помощта на PERL

  1. Вземете информация от файла относно информацията за хоста като (IP, потребителско име и парола).
  2. Използвайте Net::SSH2, за да се свържете с всяка система и да установите канал за изпълнение на командите.
  3. Изпълнете набор от необходими команди, например: ls, dir, ifconfig, ps и т.н.
  4. Рестартирайте системата.
  5. Изчакайте 10 минути, за да се появи системата.
  6. Пинг на системата с помощта на Net::Ping модул и отпечатване на състоянието.

Ще кодираме горния сценарий.

Нека вземем файл, наречен Input.txt, който ще съхранява пълната информация за всички хостове, в които трябва да се свържем и да изпълним командата.

Input.txt

192.168.1.2 root парола

192.168.1.3 root парола

192.168.1.4 root root123

HostCheck.pl

use Net::SSH2;
use Net::Ping;
use strict;
use warnings;
my $ping = Net::Ping->new();    # Creating object for Net::Ping
my $SSHObj = Net::SSH2->new();  #Creating object for Net::SSH2
open( FH, "Input.txt" );        # Opening file and placing content to FH
my @hosts = <FH>;
my $ip;
my @ips;
foreach (@hosts)
{
    if ( $_ =~ /(.*)\s+(\w+)\s+(.*)/ )    #Regex to get each info from file
    {
        $ip = $1;
        my $user = $2;
        my $password = $3;
        $SSHObj->connect($ip);
        print "Connecting to host -- $ip --Uname:$user --Password:$password\n";
        my $status = $SSHObj->auth_password( $user, $password );
        print "$status\n";
        die("unable to establish connection to -- $ip") unless ($status);
        my $shell = $SSHObj->channel();
        print "$_\n" while <$shell>;
        $shell->blocking(1);
        $shell->pty('tty');
        $shell->shell();
        sleep(5);
        #Executing the list of command on particular host. Can be any command
        print $shell "ls \n";
        print "$_\n" while <$shell>;
        print $shell "ps \n";
        print "$_\n" while <$shell>;
        print $shell "dir \n";
        print "$_\n" while <$shell>;
        print $shell "init 6\n";    #rebooting the system
        push( @ips, $ip );
    }
}
sleep 600;
foreach (@ips)
{
    if ( $ping->ping($_) )
    {
        print "$_ is alive.\n" if $ping->ping($_);
    }
    else
    {
        print "$_ is not still up --waiting for it to come up\n";
    }
}

Уеб тестване

Perl не е ограничен само до тестване на съхранение и мрежа. Можем също така да извършим уеб базирано тестване с помощта на PERL. WWW-механизиране е един модул, използван за уеб тестване. По принцип той няма да стартира никакъв браузър, за да тества функционалността на уеб приложението, а използва изходния код на html страниците.

Можем също така да извършим тестване, базирано на браузър, използвайки Selenium IDE, RC, уеб драйвер. Perl се поддържа за Selenium.

\n”; #this ще задържи оставащия низ след приключване на съвпадението.
печат “