Tutorial Perl
Ce este Perl?
Perl este un limbaj de programare de nivel รฎnalt, de uz general, interpretat ศi dinamic. Perl este un termen care รฎnseamnฤ โPractical Extraction and Reporting Languageโ, chiar dacฤ nu existฤ un acronim pentru Perl. A fost introdus de Larry Wall รฎn 1987. Limbajul Perl a fost special conceput pentru editarea textului. Dar acum, este utilizat pe scarฤ largฤ pentru o varietate de scopuri, inclusiv administrarea sistemului Linux, programarea รฎn reศea, dezvoltarea web etc.

Sฤ o punem รฎntr-un mod simplu. รn timp ce computerele รฎnศeleg doar 0 ศi 1 (limbaj binar/limbaj maศinฤ/[limbaj de nivel scฤzut]), este foarte dificil sฤ programฤm รฎntr-un limbaj binar pentru noi, oamenii. Perl este un limbaj de programare care foloseศte elemente de limbaj natural, cuvinte care sunt folosite รฎn limba englezฤ comunฤ ศi, prin urmare, este mai uศor de รฎnศeles de cฤtre oameni.limbaj de nivel รฎnalt]. Acum existฤ o problemฤ; computerele nu pot รฎnศelege limbaje de nivel รฎnalt, pe care noi, oamenii, le putem รฎnศelege cu uศurinศฤ. Pentru asta, avem nevoie de ceva care sฤ poatฤ traduce limbajul de nivel รฎnalt รฎn limbajul de nivel scฤzut. Aici interpretul ne vine รฎn ajutor. Interpretul este un program care converteศte programul scris รฎn limbajul de nivel รฎnalt รฎntr-un limbaj de nivel scฤzut pentru ca computerul sฤ รฎnศeleagฤ ศi sฤ execute instrucศiunile scrise รฎn program. Prin urmare, Perl este un limbaj de programare interpretat.
Unde se foloseศte Perl?
Puterea limbajului de scripting Perl poate fi implementatฤ รฎn multe domenii. Cea mai popularฤ utilizare a Perl este รฎn dezvoltarea Web., Perl este, de asemenea, folosit pentru a automatiza multe sarcini รฎn serverele Web ศi alte joburi de administrare, poate genera automat e-mailuri ศi curฤศa sistemele. Perl este รฎncฤ folosit รฎn scopul sฤu iniศial, adicฤ extragerea datelor ศi generarea de rapoarte. Poate produce rapoarte privind utilizarea resurselor ศi poate verifica problemele de securitate รฎntr-o reศea. Din acest motiv, Perl a devenit un limbaj popular folosit ศi รฎn dezvoltarea web, reศele ศi bioinformaticฤ. Pe lรขngฤ toate acestea, perl poate fi folosit ศi pentru programarea CGI.
Perl poate fi folosit ศi pentru crearea ศi manipularea imaginilor. รn afarฤ de aceastฤ reศea prin telnet, FTP, etc., crearea interfeศei grafice cu utilizatorul, electronicele VLSI ศi crearea de filtre de e-mail pentru a reduce practicile de spam sunt cรขteva cazuri de utilizare ale Perl.
Perl este, de asemenea, cunoscut pentru implementarea practicilor OOP (programare orientatฤ pe obiect) ศi acceptฤ toate formele de moศtenire (simple, multiple ศi diamantate), polimorfism ศi รฎncapsulare. Perl este suficient de flexibil pentru a suporta simultan practicile procedurale ศi POO. Perl are, de asemenea, module suplimentare care vฤ permit sฤ scrieศi sau sฤ utilizaศi/reutilizaศi codul scris Python, PHP, PDL, TCL, Octave, Java, C, C++, Basic, Ruby ศi Lua รฎn scriptul dvs. Perl. Aceasta รฎnseamnฤ cฤ puteศi combina Perl cu aceste suplimentare limbaje de programare mai degrabฤ rescriind codul existent.
Aplicaศii ale limbajului de programare Perl
De ce sฤ folosiศi Perl?
Este adevฤrat cฤ existฤ ศi alte limbaje de programare care pot fi folosite pentru a face toate lucrurile care au fost menศionate mai sus, atunci de ce ar trebui sฤ utilizaศi รฎn mod specific Perl? Perl este foarte uศor de รฎnvฤศat, mai ales dacฤ ai experienศฤ รฎn programarea computerelor. Perl a fost conceput pentru a fi uศor de scris ศi de รฎnศeles de cฤtre oameni, mai degrabฤ decรขt sฤ-l faciliteze procesarea de cฤtre computere. Foloseศte expresii regulate. Stilul sฤu natural de limbaj este diferit de alte limbaje de programare care folosesc gramaticฤ ศi sintaxe specifice; prin urmare, Perl este foarte flexibil ศi nu vฤ impune vreun mod special de a gรขndi o soluศie sau o problemฤ. Perl este extrem de portabil. Poate rula pe orice sistem de operare care are un interpret Perl instalat, deci este independent de platformฤ. Toate Linux OperaSistemele ting sunt instalate cu Perl, astfel รฎncรขt sฤ puteศi รฎncepe codarea Perl รฎn Linux imediat. Acest lucru este spre deosebire de scripturile Shell, รฎn care codul se modificฤ odatฤ cu utilizarea distribuศiei Linux, fฤcรขndu-l din ce รฎn ce mai puศin portabil. Sarcinile specifice mici รฎn Perl devin foarte uศoare ศi rapide. Pe parcursul acestui tutorial Perl pentru รฎncepฤtori, veศi รฎnvฤศa cum puteศi codifica programe mici ศi rapide pentru sarcini specifice. Sฤ luฤm un exemplu simplu al programului clasic Hello World care este folosit pentru a รฎncepe sฤ รฎnveศe orice limbaj de programare care are UNIX ca rฤdฤcinฤ:
Exemplu: Perl salut lume

#!/usr/bin/perl print "Hello, world!";
ieศire:
Salut Lume!
Cele douฤ linii de cod de mai sus se vor imprima Bunฤ, lume! Acum nu a fost prea simplu ศi rapid? Elevii cu cunoศtinศe de C, C++ va ศti cฤ necesitฤ mai multe linii de cod pentru a obศine aceeaศi ieศire รฎn acele limbi.
S-ar putea sฤ vฤ รฎntrebaศi de ce Perl este atรขt de faimos pe web. Este simplu, deoarece majoritatea lucrurilor care se รฎntรขmplฤ pe web sunt de TEXT, iar Perl este foarte bun la procesarea textului. Dacฤ comparฤm Perl cu oricare dintre limbi, atunci Perl va fi cea mai bunฤ limbฤ care este bunฤ รฎn gestionarea fiศierelor, procesarea textului ศi raportarea rezultatelor
Unul dintre cele mai bune avantaje ale Perl este cฤ este liber de utilizat
Comunitatea Perl crede cu tฤrie cฤ software-ul ar trebui sฤ fie liber disponibil, liber modificabil ศi liber distribuit. Mai mulศi voluntari din comunitatea Perl se strฤduiesc sฤ facฤ limbajul de programare cรขt mai bun posibil.
Avantajele ศi dezavantajele Perl
| Pro-uri: | Contra: |
|---|---|
|
|
|
|
|
Sฤ รฎncepem
Cu suficiente cunoศtinศe despre istoria Perl ศi despre conceptele de bazฤ de programare a computerelor necesare pentru codificare รฎn Perl, este timpul sฤ ne aruncฤm la cap ศi sฤ รฎncepem cu Perl. Urmฤtorul capitol vฤ va รฎnvฤศa cum puteศi configura Perl pe sistemul dumneavoastrฤ ศi sฤ vฤ pregฤtiศi pentru cฤlฤtoria de codare รฎn Perl. Acest tutorial de scriptare Perl va lua Linux ca sistem de operare pe care studenศii รฎl vor folosi pentru codificare รฎn Perl.
Descฤrcaศi ศi instalaศi Perl - Windows, Mac ศi Linux
Cum sฤ obศineศi Perl?
Veศti bune probabil il ai!
Dar dacฤ nu รฎl gฤsiศi deja pe sistemul dvs., รฎl puteศi obศine รฎn continuare gratuit.
Pentru a afla dacฤ aveศi deja instalat Perl, intraศi รฎn linia de comandฤ ศi tastaศi: perl -v

Comanda va afiศa versiunea Perl dacฤ este instalatฤ. รn acest caz, versiunea este v5.14.2. Dar dacฤ nu... nu intraศi รฎn panicฤ...
Unix
|
Deja instalat Vine preinstalat cu Perl, deศi poate fi necesar sฤ actualizaศi la cea mai recentฤ versiune. |
Mac OS
|
Deja instalat OSX vine cu Perl preinstalat, deศi poate fi necesar sฤ-l actualizaศi la cea mai recentฤ versiune |
Windows
|
Trebuie instalat Sunt disponibile douฤ opศiuni
|
Actualizarea Perl pe Linux:
Dacฤ trebuie sฤ actualizaศi versiunea Perl, introduceศi o singurฤ linie de comandฤ
sudo apt-get install perl
si relaxeaza-te. De restul se va ocupa. Doar asiguraศi-vฤ cฤ aveศi o conexiune activฤ la internet.


Instalaศi perl pentru Windows:
Mai รฎntรขi, descฤrcaศi Active Perl de aici legฤturฤ. Urmaศi aceศti paศi pentru a instala ActivePerl Windows sistem. Consultaศi capturile de ecran de mai jos pentru acelaศi lucru.
Pasul 1: Dupฤ ce descฤrcaศi programul de instalare ศi รฎncepeศi instalarea, veศi vedea fereastra de mai jos, faceศi clic pe urmฤtorul pentru a continua.

Pasul 2: Acceptaศi acordul de licenศฤ pentru a continua instalarea.

Pasul 3: Mai jos sunt diferite pachete care vor fi instalate. รn mod implicit, toate vor fi selectate. Singurul lucru diferit este PPM (Perl Package Manager). Acesta este utilitarul oferit de Active Perl pentru a instala module sau biblioteci externe Perl รฎn sistemul dumneavoastrฤ. Faceศi clic pe Urmฤtorul pentru a continua.

Pasul 4: Acestea sunt diferite tipuri de extensii Perl care pot fi folosite pentru Perl. รn mare parte, vom folosi .Pl, .Plx ศi .Pm pentru Perl. Modulele Perl folosesc practic .Pm ca extensie de fiศier pentru a se referi la un fiศier de bibliotecฤ. Selectaศi toate opศiunile ศi faceศi clic pe butonul Urmฤtorul.

Pasul 5: Faceศi clic pe butonul Instalare pentru a continua cu instalarea.

Pasul 6: Odatฤ instalat, executaศi comanda โPerl โvโ pentru a verifica dacฤ Perl este instalat cu succes รฎn sistemul dumneavoastrฤ.

Existฤ o mulศime de lucruri care trebuie discutate pentru setarea mediului Perl atรขt รฎn โโLinux, cรขt ศi Windows, deoarece nu vor fi multe fiศiere de bibliotecฤ incluse รฎn aceastฤ instalare. Trebuie sฤ le instalaศi manual. Le puteศi instala manual folosind CPAN (Comprehensive Perl Archive Network) sau fie PPM care funcศioneazฤ numai pentru perl windows. Dar aceste fiศiere nu sunt obligatorii pentru a รฎncepe codarea รฎn Perl.
รn afarฤ de aceastฤ configurare Windows, aศi putea folosi Windows Noua caracteristicฤ a subsistemului Linux din 10 pe Windows ศi utilizaศi-o pentru a rula codul perl
Primul program Perl
Hello world!
Exemplu Perl: Hello World
#!/usr/bin/perl -w #this is just a commentโฆ print "Hello World";
Nu vฤ faceศi griji dacฤ nu รฎnศelegeศi acest text. Totul va fi clar รฎn curรขnd. Haide ศi aruncฤ o privire pe rรขnd:
#!/usr/bin/perl
Aceasta spune Operating System sฤ execute acest fiศier cu programul situat la /usr/bin/perl Unele IDE-uri nu au nevoie de aceastฤ linie. Dacฤ este esenศial, trebuie sฤ scrieศi aici o cale cฤtre interpret. Tine minte! Aceastฤ linie specialฤ trebuie sฤ fie la รฎnceputul programului dvs. ศi trebuie sฤ รฎnceapฤ de la #! folosiศi avertismente; Aceasta este o altฤ comandฤ specialฤ care รฎi spune interpretului sฤ afiศeze orice avertismente, adicฤ -w care activeazฤ avertismente la nivel global.
print "Hello World";
Instrucศiunea de imprimare scrie text pe ecran. Punctul ศi virgulฤ de la sfรขrศitul liniei รฎi spune interpretului perl cฤ instrucศiunea este terminatฤ. Trebuie sฤ puneศi un punct ศi virgulฤ la sfรขrศitul fiecฤrei instrucศiuni din codul Perl. Notaศi ghilimele ("). Este necesar pentru instrucศiunile de imprimare. Salvaศi scriptul de mai sus ca firstprog.pl
On Windows
Dacฤ aveศi Strawberry instalat, puteศi pur ศi simplu sฤ faceศi clic pe Run. De asemenea, puteศi rula interfaศa de linie de comandฤ ศi puteศi scrie pe consolฤ:
C:\> perl path\firstprog.pl
sau, dacฤ perl.exe nu este รฎn calea ta:
C:\> c:\perl\bin\perl.exe firstprog.pl
Pe Linux/Unix
Trebuie doar sฤ deschideศi Terminalul ศi sฤ scrieศi:
perl firstprog.pl
Dacฤ nu puteศi rula programul, asiguraศi-vฤ cฤ aveศi eligibilitatea pentru a-l rula. Introduceศi รฎn terminal:
chmod +x firstprog.pl
Programul dvs. este acum executabil ศi gata de rulare. Pentru a executa, scrie:
./firstprog
Instalaศi modulele cpan minus
Modulele sunt seturi de coduri care sunt folosite pentru a efectua sarcini care efectueazฤ operaศii comune รฎn mai multe programe. Dacฤ utilizaศi module perl, nu trebuie sฤ rescrieศi codurile pentru a efectua aceeaศi operaศiune. Perl poate folosi astfel de biblioteci externe de coduri. Una dintre cele mai bune biblioteci este CPAN. Aceasta รฎnseamnฤ Comprehensive Perl Archireศea ศi conศine o cantitate mare de module Perl pe care sฤ le utilizaศi. Este o comunitate sau o reศea a unui numฤr mare de dezvoltatori care contribuie cu astfel de module. Instalรขnd suport pentru modulele CPAN รฎn modulul dvs. perl, puteศi utiliza modulele CPAN ศi vฤ puteศi uศura munca. Majoritatea modulelor Perl sunt scrise รฎn Perl, unele folosesc XS (sunt scrise รฎn C), aศa cฤ necesitฤ un compilator C (este uศor sฤ obศineศi aceastฤ configurare โ nu vฤ panicaศi. Modulele pot avea dependenศe de alte module (aproape รฎntotdeauna de CPAN) ศi nu poate fi instalat fฤrฤ ele (sau fฤrฤ o versiune specificฤ a acestora) Meritฤ sฤ citiศi cu atenศie documentaศia pentru opศiunile de mai jos obศineศi, despachetaศi, construiศi ศi instalaศi module din CPAN pentru a facilita instalarea altor module (ne veศi mulศumi mai tรขrziu). App-cpanminus module perl, รฎn linia de comandฤ tastaศi:
cpan App::cpanminus
cpan App::cpanminus Asiguraศi-vฤ cฤ aveศi conexiune la internet รฎn timp ce modulele perl sunt descฤrcate ศi instalate.

Acum instalaศi orice modul:
cpan โi <Module_Name>.
Sฤ vedem un exemplu de instalare a unui modul File::Data (Este o interfaศฤ pentru a accesa File Data).

Variabila Perl
Acum, vom vorbi despre variabile. Vฤ puteศi imagina un tip de container ca variabil care conศine una sau mai multe valori. Odatฤ definit, numele variabilei rฤmรขne acelaศi, dar valoarea sau valorile se schimbฤ din nou ศi din nou.
Existฤ 3 tipuri de variabile:
Tipuri de variabile รฎn Perl
Cele mai uศoare sunt scalarii, iar acesta este subiectul nostru de astฤzi
Variabilฤ scalarฤ
Acest tip de variabilฤ deศine o singurฤ valoare.
Numele sฤu รฎncepe cu un semn dolar ศi un identificator Perl (este numele variabilei noastre).
Variabilฤ scalarฤ รฎn Perl
Convenศia de denumire
Dacฤ sunteศi familiarizat cu alte limbaje de programare, atunci aศi ศti cฤ existฤ anumite reguli despre denumirea variabilelor. รn mod similar, Perl are trei reguli pentru denumirea scalarilor.
- Toate numele scalare vor รฎncepe cu $. Este uศor sฤ vฤ amintiศi sฤ prefixaศi fiecare nume cu $. Gรขndiศi-vฤ la asta ca la un scalar $.
- Ca PHP. dupฤ primul caracter $, care este special รฎn Perl, sunt permise caractere alfanumerice, adicฤ de la a la z, de la A la Z ศi de la 0 la 9. Este permis ศi caracterul de subliniere. Folosiศi sublinierea pentru a รฎmpฤrศi numele variabilelor รฎn douฤ cuvinte. โDar primul caracter nu poate fi un numฤrโ
- Chiar dacฤ numerele pot face parte din nume, ele nu pot veni imediat dupฤ $. Aceasta รฎnseamnฤ cฤ primul caracter dupฤ $ va fi fie un alfabet, fie liniuศa de subliniere. Cei care vin din C/C++ fundalul ar trebui sฤ poatฤ recunoaศte imediat asemฤnarea. Exemple
Exemplu Perl:
$var; $Var32; $vaRRR43; $name_underscore_23;
Acestea, totuศi, nu sunt nume legale de variabile scalare.
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
Regula generalฤ spune cฤ, atunci cรขnd Perl are doar unul din ceva, acesta este un scalar. Scalarii pot fi cititi de pe dispozitive ศi รฎi putem folosi รฎn programele noastre.
Douฤ tipuri de tipuri de date scalare
- Numbers
- Corzi
Numbers:
รn acest tip de date scalare am putea specifica:
- numere รฎntregi, pur ศi simplu sunt numere รฎntregi, cum ar fi 2, 0, 534
- numere รฎn virgulฤ mobilฤ, sunt numere reale, cum ar fi 3.14, 6.74, 0.333

Notฤ: รn general, interpretul Perl vede numere รฎntregi ca numere รฎn virgulฤ mobilฤ. De exemplu, dacฤ scrieศi 2 รฎn programele dvs., Perl รฎl va vedea ca 2.0000
Literale รฎntregi:
Este format din una sau mai multe cifre, precedate opศional de un plus sau minus ศi care conศin liniuศe de subliniere.
Exemple Perl:
0; -2542; 4865415484645 #this also can be written with underscores (for clarity) : 4_865_415_484_645
Dupฤ cum puteศi vedea, nu este nimic special. Dar crede-mฤ, acesta este cel mai comun tip de scalari. Sunt peste tot.
Literale รฎn virgulฤ mobilฤ:
Este format din cifre, opศional minus, virgulฤ zecimalฤ ศi exponent.
Exemple 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

Reprezentare octalฤ, hexazecimalฤ ศi binarฤ:
Este o alternativฤ la sistemul zecimal. Permiteศi-mi sฤ vฤ arฤt reprezentarea octalฤ, hexazecimalฤ ศi binarฤ. Un tabel scurt prezintฤ toate informaศiile importante despre aceste stiluri ciudate:
| Reprezentare | bazฤ | Procedat de |
|---|---|---|
| octal | 8 | 0 (zero) |
| Hexazecimal | 16 | 0x |
| Binar | 2 | 0b |
Exemple Perl:
255; # 255 in decimal notation 0377; # 255 in octal notation 0xff; # 255 in hexadecimal notation 0b11111111; # 255 in binary notation
Toate aceste valori pentru Perl รฎnseamnฤ acelaศi lucru. Perl nu stocheazฤ valorile รฎn acelaศi format. Acesta va converti intern aceste valori hexazecimale, binare, octale รฎn zecimale.
Atribuirea este cea mai comunฤ operaศie pe un scalar ศi este foarte simplฤ. Perl foloseศte pentru acel semn egal. Ia o valoare a expresiei din partea dreaptฤ ศi pune aceastฤ valoare variabilei noastre.
Sฤ aruncฤm o privire la exemple:
$size=15; # give $size value of 15 $y = -7.78; # give $y value of -7.78
รn plus, puteศi introduce รฎn variabilฤ nu doar un numฤr, ci ศi o expresie.
$z = 6 + 12 # give $z value of 18
Corzi
ศiruri: este, de asemenea, un tip de scalar foarte simplu.
Lungimea maximฤ a unui ศir รฎn Perl depinde de cantitatea de memorie pe care o are computerul. Nu existฤ limitฤ pentru dimensiunea ศirului, orice cantitate de caractere, simboluri sau cuvinte poate alcฤtui ศirurile dvs. Cel mai scurt ศir nu are caractere. Cel mai lung poate umple toatฤ memoria sistemului. Programele Perl pot fi scrise รฎn รฎntregime รฎn setul de caractere ASCII de 7 biศi. Perl vฤ permite, de asemenea, sฤ adฤugaศi orice set de caractere pe 8 sau 16 biศi. caractere non-ASCII din literalele ศir. Perl a adฤugat ศi suport pentru Unicode UTF-8.

Ca ศi numerele, existฤ douฤ tipuri diferite de ศiruri:
- Literele ศir de ghilimele simple
- Double citeazฤ literale ศiruri
Literale ศir de ghilimele simple
Ghilimelele simple sunt folosite pentru a include datele pe care doriศi sฤ le luaศi la propriu. Un scurt exemplu ศi totul ar trebui sฤ fie clar:
Exemple Perl:
#!/usr/bin/perl $num = 7; $txt = 'it is $num'; print $txt;
ieศire:
este $num
Aici, din cauza ghilimelelor simple, valoarea $num nu este luatฤ ศi caracterele literale โ$โ, โnโ, โuโ ศi โmโ sunt adฤugate la valoarea $txt
Double-literale ศir de caractere citate
Double ghilimelele sunt folosite pentru a include datele care trebuie interpolate รฎnainte de procesare. Asta รฎnseamnฤ cฤ caracterele ศi variabilele evadate nu sunt pur ศi simplu introduse literal รฎn operaศiunile ulterioare, ci sunt evaluate pe loc. Caracterele de evacuare pot fi folosite pentru a insera linii noi, tab-uri etc.
Exemple Perl:
$num = 7; $txt = "it is $num"; print $txt;
ieศire:
este 7
Aici, din cauza ghilimelelor duble, valoarea $num este adฤugatฤ la valoarea $txt
Double-ghilimele interpoleazฤ variabile scalare ศi matrice, dar nu hash-uri. Pe de altฤ parte, puteศi folosi ghilimele duble pentru a interpola felii din ambele matrice ศi hash-uri.
Misterios \n
Luaศi รฎn considerare urmฤtorul program
Exemple Perl:
print "hello \n";
ieศire:
Alo
Perl nu afiศeazฤ doar โhello\nโ, ci doar โhelloโ. De ce? Deoarece โ\nโ este un semn special ศi รฎnseamnฤ cฤ doriศi sฤ mergeศi la o nouฤ linie รฎn timp ce afiศaศi textul รฎn program. imprimaศi โbunฤ ziua\n linie nouฤโ; Urmฤtoarea รฎntrebare - existฤ vreun alt semn special? Da, ei sunt! Dar nu vฤ faceศi griji - doar cรขteva. Verificaศi tabelul de mai jos
| construi | Descriere |
|---|---|
| \n | linie nouฤ |
| \r | reveni |
| \t | fila |
| \f | formfeed |
| \b | spate spate |
| \a | clopot |
| \e | scฤpa |
| \ 007 | orice valoare ASCII octalฤ (aici, 007 = clopot) |
| \x7f | orice valoare hexadecimalฤ (aici, 7f = ศterge) |
| \\ | backslash |
| \ " | citat dublu |
| \l | urmฤtoarea literฤ micฤ |
| \L | toate literele urmฤtoare pรขnฤ la \E |
| \u | litera urmฤtoare majuscule |
| \U | majuscule toate literele urmฤtoare pรขnฤ la \E |
| \E | Terminaศi \L, \U |
ศtiu, nu existฤ โdoar cรขtevaโโฆ Dar crede-mฤ, trebuie sฤ ศtii doar
Variabilฤ ศiruri
Este aceeaศi operaศiune, pe care o vedem รฎn alocarea numerelor. Perl primeศte ศirul nostru din partea dreaptฤ a semnului egal ศi pune acest ศir รฎntr-o variabilฤ.
Exemple 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;
ieศire:
tutorial 315
Dupฤ cum puteศi vedea, puteศi pune numere ศi ศiruri รฎn aceleaศi variabile. Nu existฤ o clasฤ de variabile.
Concatenarea ศirurilor (perioada) :
Operatorul de concatenare โ.โ uneศte douฤ sau mai multe ศiruri. Tine minte! Dacฤ ศirul conศine ghilimele, รฎntoarceri de transport, bare oblice inverse, toate aceste caractere speciale trebuie sฤ fie eliminate cu o barฤ oblicฤ inversฤ.
Variabila Perl " " Exemple:
#!/usr/bin/perl $a = "Tom is"; $b = "favorite cat"; $c = $a ." mother's ". $b; print $c;
ieศire:
Tom este pisica preferatฤ a mamei
Corzile
โ$aโ, โ$bโ, este concatenat ศi stocat รฎn โ$cโ folosind โ.โ operator.
La sfarsitโฆ
Conversia รntre Numbers ศi ศiruri:
Dupฤ cum ศtiศi, Perl converteศte automat รฎntre numere รฎn ศir, dupฤ cum este necesar. De unde ศtie Perl de ce avem nevoie acum? Acest lucru este simplu - totul depinde de operator (vom vorbi despre operatori mai tรขrziu, acum, acceptaศi doar cฤ existฤ o mulศime de operatori, diferiศi pentru numere ศi ศiruri) Dacฤ un operator aศteaptฤ un numฤr, Perl va folosi valoarea ca numฤr . Dacฤ un operator aศteaptฤ un ศir, Perl va folosi valoarea ca ศir. Cu alte cuvinte, nu trebuie sฤ vฤ faceศi griji cu privire la acest tip de conversie. Exemplu scurt ศi totul ar trebui sฤ fie clar:
Exemple Perl:
$string = "43"; $number = 28; $result = $string + $number; print $result;
ieศire:
71
valoarea $string este convertitฤ รฎntr-un numฤr รฎntreg ศi adฤugatฤ la valoarea $number.
Rezultatul adunฤrii, 71, este atribuit $result.
Domeniul de aplicare al unei variabile โ Modificatori de acces
Putem declara un scalar รฎn oriunde รฎn program. Dar trebuie sฤ specificaศi un modificator de acces
Existฤ 3 tipuri de modificatori
- my
- local
- al nostru
My: Folosind aceasta, puteศi declara orice variabilฤ care este specificฤ รฎn bloc. adicฤ รฎn cadrul bretelor.
#!/usr/bin/perl
my $var=5;
if(1)
{
my $var_2 =$var;
}
print $var_2;
Fฤrฤ ieศire
Rezultatul programului nu va fi nimic!

รn exemplul de mai sus, veศi vedea cฤ existฤ douฤ variabile declarate una este รฎn interiorul blocului if ($var_2) ศi cealaltฤ este รฎn afara blocului If ($var). Variabila, care este declaratฤ รฎn afara blocului, va fi accesibilฤ pentru if block, dar variabila care a fost declaratฤ รฎn interiorul if block nu va fi accesibilฤ programului exterior.
Local: Folosind aceasta, putem de fapt masca aceleaศi valori ale variabilei รฎn valori diferite, fฤrฤ a schimba efectiv valoarea iniศialฤ a variabilei, sฤ presupunem cฤ avem o variabilฤ $a cฤreia i se atribuie valoarea 5, puteศi schimba de fapt valoarea acelei variabile prin re-declararea aceleiaศi variabile folosind cuvรขntul cheie local fฤrฤ a modifica valoarea iniศialฤ a variabilei care este 5. Sฤ vedem cum funcศioneazฤ acest lucru cu un exemplu.
#!/usr/bin/perl
$var = 5;
{
local $var = 3;
print "local,\$var = $var \n";
}
print "global,\$var = $var \n";
Ieศirea programului de mai sus va fi รฎn acest mod.
local, $var = 3
global, $var = 5
รn acest fel putem schimba valoarea variabilei fฤrฤ a afecta valoarea iniศialฤ.
Nostru: Odatฤ ce o variabilฤ este declaratฤ cu modificatorul de acces โnostruโ, aceasta poate fi utilizatฤ รฎn รฎntregul pachet. Sฤ presupunem cฤ aveศi un modul Perl sau un pachet test.pm care are o variabilฤ declaratฤ cu scope our. Aceastฤ variabilฤ poate fi accesatฤ รฎn orice script care va folosi acel pachet.
Dacฤ sunteศi serios รฎn ceea ce priveศte programarea รฎn Perl, ar trebui sฤ รฎncepeศi programul cu
#!/usr/local/bin/perl
folosiศi strict;
Acest lucru vฤ va ajuta sฤ scrieศi un cod mai bun ศi mai curat. โutilizaศi strictโ activeazฤ pragma strictฤ, ceea ce vฤ va face sฤ vฤ declaraศi variabilele cu cuvรขntul cheie.
Aceasta este o practicฤ bunฤ de programare
#!/usr/local/bin/perl use strict; $var = 10; print "$var";
Rezultat: Eroare
#!/usr/local/bin/perl use strict; my $var = 10; print "$var";
ieศire:
10
Perl Array
Ce este Perl Array?
Un Array este un tip special de variabilฤ care stocheazฤ date sub forma unei liste; fiecare element poate fi accesat folosind numฤrul de index care va fi unic pentru fiecare element. Puteศi stoca numere, ศiruri de caractere, valori flotante etc. รฎn matricea dvs. Arata grozav. Deci, cum creฤm o matrice รฎn Perl? รn Perl, puteศi defini o matrice folosind caracterul โ@โ urmat de numele pe care doriศi sฤ-l daศi. Sฤ luฤm รฎn considerare definirea unui tablou รฎn Perl.
@matricea mea;
Acesta este modul รฎn care definim o matrice รฎn Perl; s-ar putea sฤ vฤ gรขndiศi cum trebuie sฤ stocฤm datele รฎn el. Existฤ diferite moduri de stocare a datelor รฎntr-o matrice. Aceasta depinde de modul รฎn care รฎl vei folosi.
my @array=(a,b,c,d); print @array;
ieศire:
a B C D
Aceasta este o matrice cu 4 elemente รฎn ea.
Indicele matricei รฎncepe de la 0 ศi se terminฤ pรขnฤ la dimensiunea maximฤ declaratฤ, รฎn acest caz, dimensiunea maximฤ a indexului este 3.
Exemplu de matrice Perl
De asemenea, puteศi declara o matrice รฎn modul de mai sus; singura diferenศฤ este cฤ stocheazฤ datele รฎntr-o matrice, considerรขnd un spaศiu alb ca delimitator. Aici, qw() รฎnseamnฤ cuvรขnt citat. Semnificaศia acestei funcศii este de a genera o listฤ de cuvinte. Puteศi utiliza qw รฎn mai multe moduri pentru a declara o matrice.
@array1=qw/a b c d/;
@array2= qw' p q r s';
@array3=qw { v x y z};
print @array1;
print @array2;
print @array3;
ieศire:
abcdpqrsvxyz
Sฤ presupunem cฤ doriศi sฤ atribuiศi o valoare lui 5th element al unui tablou, cum vom face asta.
$array [4] ='e';
Matrice secvenศialฤ
Matricele secvenลฃiale sunt acelea รฎn care stocaลฃi datele secvenลฃial. Sฤ presupunem cฤ doriศi sฤ stocaศi 1-10 numere sau alfabete az รฎntr-o matrice. รn loc sฤ tastaศi toate literele, puteศi รฎncerca ceva ca mai jos -
@numbers= (1..10); print @numbers; #Prints numbers from 1 to 10;
ieศire:
12345678910
Dimensiunea matricei Perl
Avem o matrice care este deja disponibilฤ ศi nu ศtiศi care este dimensiunea matricei respective, deci care este modalitatea posibilฤ de a o gฤsi.
@array= qw/a b c d e/; print $size=scalar (@array);
Putem obศine dimensiunea unei matrice fฤrฤ a folosi funcศii? Da putem.
@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
ieศire:
5
5
Matrice dinamicฤ
Metoda de mai sus de declarare a unui tablou este numitฤ matrice statice, unde cunoaศteศi dimensiunea unei matrice.
Ce este Dynamic Array?
Matricele dinamice sunt cele pe care le declaraศi fฤrฤ a specifica nicio valoare pentru ele. Deci, cรขnd mai exact stocฤm valori รฎn acea matrice? Simplu, le stocฤm รฎn timpul rulฤrii. Iatฤ un program simplu pentru asta.
Vom folosi cรขteva funcศii Perl รฎncorporate pentru a face aceastฤ sarcinฤ.
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.
}
ieศire:
Asta e
un fel de dyn
MIC
rr
y
Funcศia de รฎmpฤrศire รฎmparte conศinutul ศirului รฎntr-o matrice pe baza delimitatorului furnizat acestuia. Aceastฤ funcศie va elimina ศi delimitatorul din ศir, รฎn acest caz, este โaโ;
Push, Pop, shift, unshift pentru matrice Perl:
Aceste funcศii pot fi folosite รฎn Perl pentru a adฤuga/ศterge elemente ale matricei.
- Perl Push: adaugฤ un element de matrice la sfรขrศitul unui tablou existent.
- Perl Pop: eliminฤ ultimul element dintr-o matrice.
- Perl Shift: eliminฤ primul element dintr-o matrice.
- Perl Unshift: adaugฤ un element la รฎnceputul unui tablou.

Sฤ vedem un exemplu รฎn care putem folosi funcศiile de mai jos.
@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";
ieศire:
1: Luni Mar Mier
Al doilea la apฤsare: Luni Mar Mier Joi
Al 3-lea cรขnd nu se schimbฤ: Vin Luni Mar Mier Joi
Al 4-lea cรขnd pop: Vin Luni Mar Mier
A 5-a la schimbul: Luni Mar Mier
Perl Hashes
De ce avem nevoie de Hash?
Am รฎnvฤศat deja despre scalari ศi matrice รฎn secศiunile anterioare.
Ce fac mai exact scalarii? Stocheazฤ doar numere รฎntregi ศi ศiruri de caractere.
Ce fac mai exact matricele? Este o colecศie de scalari, รฎn care accesaศi fiecare element al unui tablou folosind indici. Dar, este aceasta idee bunฤ sฤ folosiศi o matrice atunci cรขnd aveศi sute ศi mii de รฎnregistrฤri? Vom uita ce indice are ce valoare. Pentru a depฤศi aceastฤ situaศie avem ceva de genul perl hash.
Ce sunt hashe-urile?
Un hash poate conศine, de asemenea, atรขt de mulศi scalari cรขt poate conศine matricea. Singura diferenศฤ este cฤ nu avem niciun index, mai degrabฤ avem chei ศi valori. Un hash poate fi declarat, รฎncepรขnd cu % urmat de numele hash-ului. Sฤ vedem un exemplu cum putem defini un hash Perl ศi cum รฎl putem diferenศia de matrice
Luaศi รฎn considerare un exemplu de trei persoane ศi vรขrstele lor sunt reprezentate รฎntr-o matrice.
@array=('Sainath',23,'Krishna',24,'Shruthi',25); #This is how an array looks.
print @array;
ieศire:
Sainath33Krishna24Shruthi25
รn acest fel, este dificil sฤ cunoaศtem vรขrstele individuale, deoarece trebuie sฤ ne amintim atรขt locaศiile index ale numelui, cรขt ศi vรขrsta tuturor oamenilor. Poate fi simplu cรขnd ai 3 nume, dar cรขnd ai 1000 sau mai multe? Tu sti raspunsul.

Acest lucru รฎl putem depฤศi folosind un hash.
Exemplu de hash:
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.
ieศire:
Sainath33Krishna24Shruthi25Sainath33Krishna24Shruthi25
Acum am declarat un hash, grozav!! Dar, cum รฎl accesฤm sau รฎl imprimฤm? Fiecare element din hash ar trebui sฤ fie accesat cu cheia asociatฤ pentru care va fi atribuitฤ o valoare. Deci, existฤ o mapare unu-unu รฎntre fiecare cheie ศi valoare din hash.
Pentru a imprima vรขrsta oricฤrei persoane, trebuie doar sฤ vฤ amintiศi numele acelei persoane.
print $hash{'Krishna'}; # This how we should access a hash. Key enclosed within {}.
Poate v-aศi รฎntrebat de ce am folosit $hash{KeyName}, amintiศi-vฤ cฤ un hash este din nou o colecศie de scalari. Deci, putem folosi $ care reprezintฤ scalar pentru a accesa fiecare element hash.

Notฤ: Fiecare cheie din hash ar trebui sฤ fie unicฤ, altfel va suprascrie valoarea dvs., care a fost atribuitฤ anterior.
Cum putem atribui un hash altui hash? Simplu, la fel ca noi pentru
De asemenea, putem imprima รฎntregul hash.
%hash=( 'Tom' => 23); %newHash=%hash; # Assigning hash to a new hashprint %newHash; print %newHash;
ieศire:
Tom23
Adฤugaศi hashuri Perl
Dupฤ cum puteศi vedea, avem deja un hash %newHash, iar acum trebuie sฤ adฤugฤm mai multe intrฤri รฎn el.
$newHash{'Jim'}=25;
$newHash{'John'}=26;
$newHash{'Harry'}=27;
print %newHash;
ieศire:
Jim25John26Harry27
Tasta Perl Delete
Poate doriศi sฤ ศtergeศi o intrare dintr-un hash. Aศa putem face asta.
delete $newHash{'Jim'};#This will delete an entry from the hash.
Delete este o funcศie รฎncorporatฤ a Perl. Aici, vom vedea un exemplu de atribuire a unui hash unei matrice.
@array=%newHash; print "@array";
Notฤ: Ori de cรขte ori imprimaศi un hash sau cรขnd stocaศi hash รฎntr-o matrice. Ordinea poate fi รฎntotdeauna diferitฤ. Nu este mereu la fel.
Putem aloca unui tablou doar chei sau valori ale unui hash.
@arraykeys= keys(%newHash); @arrayvalues=values(%newHash); print "@arraykeys\n"; print "@arrayvalues\n"; # \n to print new line.
Pentru a elimina toate intrฤrile din hash, putem atribui direct hash-ul la null.
%newHash=();# Aceasta va redefini hash-ul fฤrฤ intrฤri.
Instrucศiuni condiศionale Perl
Putem folosi instrucศiuni condiศionale รฎn Perl. Deci, ce sunt declaraศiile condiศionate? Declaraศiile condiศionate sunt acelea รฎn care de fapt verificaศi dacฤ anumite circumstanศe sunt รฎndeplinite รฎn codul dvs.
Gรขndeศte-te la un exemplu, cumperi niศte fructe ศi nu-ศi place cฤ preศul este mai mare de 100 de dolari. Deci, regula aici este 100 de dolari.
Perl acceptฤ douฤ tipuri de instrucศiuni condiศionale; sunt dacฤ ศi dacฤ nu.
Perl Dacฤ
Dacฤ blocul de cod va fi executat, cรขnd condiศia este adevฤratฤ.

my $a=5;
if($a==5)
{
print "The value is $a";
}
ieศire:
5
Perl Dacฤ Altceva
Asta aratฤ bine. Sฤ ne gรขndim la o situaศie รฎn care $a nu este 5.
my $a=10;
if($a==5)
{
print "The values is $a ---PASS";
}
else
{
print "The value is $a ---FAIL";
}
ieศire:
Valoarea este 10 โ FAIL
รn acest fel, putem controla o singurฤ condiศie la un moment dat. Este o limitare? Nu, puteศi controla ศi diverse condiศii folosind if... elsif... else.
Perl Else Dacฤ
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";
}
ieศire:
Bloc elsif executat โ Valoarea este 5
รn cazul de mai sus, blocul elsif va fi executat deoarece $a este egal cu 5.
Ar putea exista situaศii รฎn care atรขt blocurile de cod if ศi elsif vor fi eศuate. รn acest scenariu, blocul de cod else va fi executat. De fapt, puteศi elimina verificarea codului else dacฤ nu doriศi sฤ includeศi.
Perl Imbricat If
รn acest caz, puteศi utiliza if code block รฎntr-un alt cod 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";
}
ieศire:
รn interiorul primului bloc else โ valoarea este 1
Executaศi acelaศi cod schimbรขnd valoarea lui $a; poti afla restul.
Perl Dacฤ nu
Ai deja o idee ce se รฎntรขmplฤ dacฤ (dacฤ condiศia este adevฤratฤ, va executa blocul de cod). Cu excepศia cazului รฎn care este opusฤ dacฤ, dacฤ blocul de cod nu va fi executat dacฤ condiศia este falsฤ.
my $a=5;
unless($a==5)
{
print "Inside the unless block --- The value is $a";
}
else
{
print "Inside else block--- The value is $a";
}
ieศire:
รn interiorul primului bloc else โ valoarea este 1
Ghici care va fi rezultatul. Ai dreptate!!!!!. Ieศirea va fi instrucศiunea de tipฤrire a blocului else. Din cauza condiศiei รฎn dacฤ blocul de cod nu este adevฤrat, reศineศi dacฤ blocul nu va fi executat numai dacฤ condiศia este falsฤ. Schimbaศi valoarea lui $a ศi executaศi codul, veศi vedea diferenศa.
Perl Folosind if
$a= " This is Perl";
if($a eq "SASSDSS"){
print "Inside If Block";
}
else
{
print "Inside else block"
}
ieศire:
รn interiorul blocului else
Folosind dacฤ nu
$a= " This is Perl";
unless($a eq "SASSDSS"){
print "Inside unless Block";
}
else
{
print "Inside else block"
}
ieศire:
รnฤuntru, dacฤ nu Block
Perl Loops โ Structuri de control
Perl acceptฤ structuri de control similare cu alte limbaje de programare. Perl acceptฤ patru tipuri de structuri de control pentru, foreach, while ศi until. Folosim aceste instrucศiuni pentru a executa รฎn mod repetat un anumit cod.
Pentru bucla Perl
Pentru blocul de cod se va executa pรขnฤ cรขnd condiศia este รฎndeplinitฤ. Sฤ luฤm un exemplu despre cum se face bucla Perl รฎntr-o matrice.
my @array=(1..10);
for(my $count=0;$count<10;$count++)
{
print "The array index $count value is $array[$count]";
print "\n";
}
ieศire:
Valoarea indicelui matricei 0 este 1
Valoarea indicelui matricei 1 este 2
Valoarea indicelui matricei 2 este 3
Valoarea indicelui matricei 3 este 4
Valoarea indicelui matricei 4 este 5
Valoarea indicelui matricei 5 este 6
Valoarea indicelui matricei 6 este 7
Valoarea indicelui matricei 7 este 8
Valoarea indicelui matricei 8 este 9
Valoarea indicelui matricei 9 este 10
Aici, รฎn expresia pentru (), sunt incluse multe afirmaศii. Existฤ un sens pentru fiecare dintre ele.
pentru ( iniศializare; condiศie; creศtere)
Iatฤ un alt mod de utilizare pentru.
for(1..10)
{
print "$_ n";
print "\n";
}
ieศire:
1n
2n
3n
4n
5n
6n
7n
8n
9n
10n
Perl Foreach
Pentru fiecare declaraศie poate fi folositฤ รฎn acelaศi mod ca for; diferenศa principalฤ este cฤ nu avem nicio verificare ศi creศtere a stฤrii รฎn acest sens.
Sฤ luฤm acelaศi exemplu cu foreach perl.
my @array=(1..10);
foreach my $value (@array)
{
print " The value is $value\n";
}
ieศire:
Valoarea este 1
Valoarea este 2
Valoarea este 3
Valoarea este 4
Valoarea este 5
Valoarea este 6
Valoarea este 7
Valoarea este 8
Valoarea este 9
Valoarea este 10
Foreach preia fiecare element al unui tablou ศi atribuie acea valoare lui $var pentru fiecare iteraศie. De asemenea, putem folosi $_ pentru acelaศi lucru.
my @array=(1..10);
foreach(@array)
{
print " The value is $_ \n"; # This is same as the above code.
}
ieศire:
Valoarea este 1
Valoarea este 2
Valoarea este 3
Valoarea este 4
Valoarea este 5
Valoarea este 6
Valoarea este 7
Valoarea este 8
Valoarea este 9
Valoarea este 10
Acest lucru aratฤ bine pentru accesarea matricelor. Ce zici de hashuri, cum putem obศine chei hash ศi valori folosind foreach?
Putem folosi foreach pentru a accesa cheile ศi valorile hash-ului prin bucla.

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $key (keys %hash)
{
print "$key \n";
}
ieศire:
bฤuturฤ conศinรขnd un drog
Tom
Oalฤ de noapte
S-ar putea sฤ vฤ รฎntrebaศi de ce am folosit Keys รฎn foreach(). Keys este o funcศie รฎncorporatฤ a lui Perl, unde putem accesa rapid cheile hash-ului. Ce zici de valori? Putem folosi funcศia values โโpentru a accesa valorile hash-ului.
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";
}
ieศire:
valoarea este 24
valoarea este 23
valoarea este 25
Perl รฎn timp ce
Bucla Perl While este o structurฤ de control, รฎn care blocul de cod va fi executat pรขnฤ cรขnd condiศia este adevฤratฤ.
Blocul de cod va ieศi numai dacฤ condiศia este falsฤ.
Sฤ luฤm un exemplu pentru bucla Perl While.

Iatฤ o problemฤ, care va necesita introducerea utilizatorului ศi nu va ieศi pรขnฤ la numฤrul furnizat ca โ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"
ieศire:
Ghiciศi un numฤr รฎntre 1 ศi 10
9
Ghiciศi un numฤr รฎntre 1 ศi 10
5
Ghiciศi un numฤr รฎntre 1 ศi 10
7
Ai ghicit numฤrul norocos 7
รn exemplul de mai sus, condiศia while nu va fi adevฤratฤ dacฤ introducem o altฤ intrare decรขt โ7โ.
Dacฤ vedeศi cum funcศioneazฤ while aici, blocul de cod se va executa numai dacฤ condiศia รฎntr-un timp este adevฤratฤ.
Perl do-while
Bucla Do while se va executa cel puศin o datฤ chiar dacฤ condiศia din secศiunea while este falsฤ.
Sฤ luฤm acelaศi exemplu folosind do while.
$guru99 = 10;
do {
print "$guru99 \n";
$guru99--;
}
while ($guru99 >= 1);
print "Now value is less than 1";
ieศire:
10
9
8
7
6
5
4
3
2
1
Acum valoarea este mai micฤ de 1
Perl pรขnฤ cรขnd
Pรขnฤ cรขnd blocul de cod este similar cu excepศia cazului รฎntr-o declaraศie condiศionatฤ. Aici, blocul de cod se va executa numai dacฤ condiศia pรขnฤ la bloc este falsฤ.
Sฤ luฤm acelaศi exemplu pe care l-am folosit la un timp.
Iatฤ o problemฤ, care va necesita intrare de la utilizator ศi nu va ieศi pรขnฤ cรขnd numele furnizat ca altul decรขt โsaiโ.
print "Enter any name \n";
my $name=<STDIN>;
chomp($name);
until($name ne 'sai')
{
print "Enter any name \n";
$name=<STDIN>;
chomp($name);
}
ieศire:
Introdu orice nume sai
Perl pรขnฤ la:
Do until poate fi folosit doar atunci cรขnd avem nevoie ca o condiศie sฤ fie falsฤ ศi ar trebui sฤ fie executatฤ cel puศin o datฤ.
print "Enter any name \n";
my $name=<STDIN>;
chomp($name);
do
{
print "Enter any name \n";
$name=<STDIN>;
chomp($name);
}until($name ne 'sai');
ieศire:
Introdu orice nume Howard
Introdu orice nume Sheldon
Introdu orice nume sai
Executaศi coduri de exemplu while, do-while, until ศi do-until pentru a vedea diferenศa.
Perl OperaTdR
Ce Este Operator?
Operatori รฎn limbajul computerului indicฤ o acศiune care poate fi efectuatฤ asupra unui set de variabile sau valori pe care computerul le poate รฎnศelege. Perl a รฎncorporat majoritatea Operatori din limbajul C. Perl are mulศi operatori รฎn comparaศie cu alte limbaje de programare. Operatorii sunt clasificaศi ca operatori aritmetici, logici, relaศionali ศi de atribuire.
Aritmeticฤ Operators:
Operatorii aritmetici sunt cei care pot fi utilizaศi pentru a efectua unele operaศii matematice de bazฤ. Aceศti operatori aritmetici sunt operatori binari รฎn care avem nevoie de douฤ argumente pentru a efectua o operaศie de bazฤ. De asemenea, putem folosi operatori unari pentru alte operaศii de bazฤ; puteศi vedea diferenศa รฎn exemple de mai jos.
| OperaTdR | Descriere | Exemplu |
|---|---|---|
|
+ |
Operaศie de adunare utilizatฤ pentru adฤugarea a douฤ valori sau variabile deลฃinรขnd valori |
$x=5+6; # sau $y=6; $z=$x+$y; |
|
- |
Operator de scฤdere utilizat pentru scฤderea a douฤ valori sau variabile care deศin valori |
$x=6-5; # sau $y=6; $z=$x-$y; |
|
* |
Operator de multiplicare utilizat pentru รฎnmulศirea a douฤ valori sau variabile care deศin valori |
$x=6*5; # sau $y=6; $z=$x*$y; |
|
/ |
Operatorul de divizare utilizat pentru รฎmpฤrศirea a douฤ valori sau variabile care deศin valori |
$x=36/6; # sau $y=6; $z=$x/$y; |
|
** |
Operatorul exponenศial utilizat pentru a furniza exponent ศi a obศine valoarea. Ex: 22 = 43 = 27 |
$x=5**5; # sau $x=4; $y=2; $z=$x**$y; |
|
% |
Operatorul de modul folosit pentru a obศine memento รฎn timpul รฎmpฤrศirii a douฤ valori sau variabile care deศin valori |
$x=5%2; # sau $x=10; $y=2; $z=$x % $y; |
|
++ |
Operator de adฤugare unar pentru a incrementa valoarea unei variabile cu 1 |
$x=5; $x++; Or ++$x; |
|
- |
Operatorul de scฤdere unarฤ pentru a reduce valoarea unei variabile cu 1 |
$x=5; $xโ; # post decrement Or โ$x;# รฎnainte de decrement |
Exemplu pentru a finaliza toate operaศiunile de mai sus.
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");
ieศire:
Adunarea dintre 10 ศi 2 este 12
Sub 10 ศi 2 este 8
Mul de 10 ศi 2 este 20
Div de 10 ศi 2 este 5
Exp de 10 ศi 2 este 100
Mod-ul 10 ศi 2 este 0
Cesiune Operators:
Operatorii de atribuire pur ศi simplu atribuie valori variabilelor, dar mai este un lucru pe care trebuie sฤ-l reศinem aici, operatorii de atribuire vor efectua ศi operaศii aritmetice ศi vor atribui noua valoare aceleiaศi variabile pe care este efectuatฤ operaศia.
| OperaTdR | Descriere | Exemplu |
|---|---|---|
|
+= |
Operatorul de adฤugare utilizat pentru adฤugarea ศi atribuirea valorii aceleiaศi variabile |
$x=4; $x+=10; |
|
-= |
Operatorul de scฤdere utilizat pentru scฤderea ศi atribuirea valorii aceleiaศi variabile |
$x=4; $x-=10; |
|
*= |
Operator de multiplicare utilizat pentru adฤugarea ศi atribuirea valorii aceleiaศi variabile |
$x=4; $x*=10; |
|
/= |
Operatorul de divizare utilizat pentru รฎmpฤrศirea ศi atribuirea valorii aceleiaศi variabile |
$x=4; $x/=10; |
|
**= |
Operatorul exponenศial utilizat pentru obศinerea exponentului ศi atribuirea valorii aceleiaศi variabile |
$x=4; $x**=10; |
|
%= |
Operator de modul utilizat pentru obศinerea unui memento รฎn timpul รฎmpฤrศirii ศi atribuirea valorii aceleiaศi variabile |
$x=10; $x%=4; |
Exemplu pentru a finaliza toate operaศiunile de mai sus.
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");
ieศire:
Adฤugaศi = 15
Sub= 10
Mul = 50
Div = 10
logic ศi relaศional Operators:
Perl foloseศte operatori logici pentru a compara numere ศi ศiruri. De cele mai multe ori operatorii logici sunt utilizaศi รฎn instrucศiunile condiศionate.
logic ศi relaศional Operators รฎn Perl
| OperaTdR | Descriere |
|---|---|
|
==sau echivalentul |
Operator folosit pentru a verifica dacฤ ambele variabile sunt egale |
|
!=Sau ne |
Operator folosit pentru a verifica dacฤ ambele variabile nu sunt egale |
|
> sau gt |
Operator folosit pentru a verifica dacฤ A este mai mare decรขt B |
|
<or lt |
Operator folosit pentru a verifica dacฤ A este mai mic decรขt B |
|
>=sau ge |
Operator folosit pentru a verifica dacฤ A este mai mare sau egal cu B |
|
<=sau le |
Operator folosit pentru a verifica dacฤ A este mai mic sau egal cu B |
|
|| sau sau |
Operator folosit pentru a verifica fie A sau B este valoarea de pฤstrare |
|
&&sau ศi |
Operator folosit pentru a verifica atรขt A cรขt ศi B are valoarea de pฤstrare |
Sฤ luฤm un exemplu รฎn care putem explica toate scenariile.
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");
}
ieศire:
Adevฤrat - egal cu 5 ศi 5
Adevฤrat - nu este egal cu 6 ศi 7
Adevฤrat - 7 mai mare decรขt 6
Adevฤrat - 6 mai puศin decรขt 7
Adevฤrat - 6 mai puศin decรขt 7
Adevฤrat - 7 mai mare decรขt 6
Puteศi vedea exemple de operatori logici รฎn secศiunile ulterioare.
Variabile speciale Perl
Ce este Perl Special Variables?
Variabilele speciale รฎn Perl sunt cele care au o anumitฤ semnificaศie predefinitฤ. Aceste variabile sunt desemnate fie cu nume real, fie cu simboluri de punctuaศie. Avem o variabilฤ specialฤ pentru toate variabilele suportate de Perl, cum ar fi variabile speciale scalare, variabile speciale Array, variabile speciale hash. Majoritatea variabilelor speciale pe care le folosim sunt scalari.
Cรขnd vrem sฤ folosim variabila specialฤ cu numele ei, atunci trebuie sฤ รฎncฤrcฤm un modul Perl โutilizaศi englezaโ, pentru a spune explicit interpretului Perl cฤ vom folosi variabile speciale folosind numele sฤu.
Variabile speciale scalare
| Variabil | Descriere |
|---|---|
|
$_$ARG |
Aceasta este variabila implicitฤ care stocheazฤ valorile curente. |
|
$0 sau $PROGRAM_NAME |
Stocheazฤ numele fiศierului scriptului Perl. |
|
$/ |
Separatorul de รฎnregistrare de intrare, acesta are o valoare implicitฤ de โ\nโ, care este caracterul de nouฤ linie |
|
$. |
Deศine numฤrul de linie curent al fiศierului care este citit |
|
$, |
Separator de cรขmpuri de ieศire, acesta este utilizat รฎn principal de instrucศiunea print(). รn mod implicit, valoarea acesteia este setatฤ la 0, putem schimba valoarea acestei variabile. |
|
$\ |
Separator de รฎnregistrare de ieศire, valoarea acestei variabile va fi goalฤ; รฎi putem atribui orice valoare, care va fi folositฤ de instrucศiunea print() รฎn timp ce imprimฤm rezultatul. |
|
$# |
Aceastฤ variabilฤ este utilizatฤ pentru formatul de ieศire รฎn timpul tipฤririi numerelor. |
|
$%$FORMAT_PAGE_NUMBER |
Va pฤstra numฤrul de paginฤ curent al fiศierului citit. |
|
$=$FORMAT_LINES_PER_PAGE |
Va pฤstra lungimea curentฤ a paginii a fiศierului citit. |
|
$-$FORMAT_LINES_LEFT |
Reศine valoarea numฤrului de linii rฤmase de imprimat din paginฤ. |
|
$~$FORMAT_NAME |
Format Nume: Deศine รฎn mod implicit formatul ieศirii selectate curent, numele handler-ului fiศierului. |
|
$^$FORMAT_TOP_NAME |
Deศine valoarea formatului de antet al handler-ului fiศierului, valoarea implicitฤ va fi _TOP urmatฤ de numele handle-ului fiศierului. |
|
$|$OUTPUT_AUTOFLUSH |
Valoarea implicitฤ este zero; aceasta este folositฤ pentru a goli buffer-ul de ieศire dupฤ fiecare write() sau print(). |
|
$$ |
Va pฤstra numฤrul procesului de rulare al interpretului Perl. |
|
$? |
Cod de stare: Conductฤ ศi apel de sistem. Starea de revenire a comenzii executate. |
|
$&$PORIT |
Folosit รฎn expresiile regulate, acesta va reศine un ศir al ultimului model de potrivire reuศitฤ. |
|
$`$Premeci |
Folosit รฎn expresiile regulate, acesta va menศine ศirul precedat de ultima potrivire reuศitฤ a modelului. |
|
$'$POSTMECI |
Folosit รฎn expresiile regulate, acesta va deศine un ศir urmat de ultima potrivire reuศitฤ a modelului. |
|
$+$LAST_PAREN_MATCH |
ศine ศirul ultimei paranteze care se potriveศte cu ultimul model de cฤutare. |
|
$ |
1 USD, 2 USD, 3 USD... Menศine valorile modelului potrivite รฎn ordine. |
|
$[ |
Primul index: Array, un subศir. |
|
$] |
O versiune de Perl. |
|
$โ |
Separatorul folosit pentru elementele listei, valoarea implicitฤ este un spaศiu alb. |
|
$; |
Separator de indice utilizat รฎn tablourile multidimensionale |
|
$! |
รn context numeric, tipฤreศte numฤrul erorii. รn contextul ศirului, tipฤriศi eroarea. |
|
$@ |
Va pฤstra informaศiile despre eroarea de sintaxฤ, utilizate atunci cรขnd se utilizeazฤ eval(). |
|
$< |
Deศine UID-ul real (ID-ul utilizatorului) al procesului care ruleazฤ scriptul. |
|
$> |
Deศine UID-ul efectiv al procesului care ruleazฤ scriptul. |
|
$( |
Deศine GID-ul real (ID de grup) al procesului care ruleazฤ scriptul. |
|
$) |
Deศine GID-ul efectiv al procesului care ruleazฤ scriptul. |
|
$^D$DEBUGARE |
Deศine valoarea curentฤ a steagurilor de depanare. |
|
$^C |
Menศine valoarea curentฤ a steagului atunci cรขnd este utilizat comutatorul de linie de comandฤ โc. |
|
$^F |
Descriptorul maxim al fiศierului de sistem, valoarea implicitฤ, este setat la 2 |
|
$^I$INPLACE_EDIT |
Deศine valoarea comutatorului de linie de comandฤ โi. |
|
$^M |
Pool-ul de memorie special poate fi utilizat atunci cรขnd scriptul Perl moare cu o eroare de memorie lipsitฤ. |
|
$^O$OSNAME |
Operainformaศiile de sistem sunt stocate. โLinuxโ pentru sistemele Linux, โmswin32โ pentru Windows sisteme. |
|
$^T$BASETIME |
Timpul รฎn care scripturile ruleazฤ รฎn secunde. |
|
$^W$AVERTISMENT |
Valoarea curentฤ a comutatorului de linie de comandฤ โw. Comutator de avertizare. |
|
$ARGV |
Numele fiศierului curent, cรขnd se foloseศte <>. |
Variabile speciale ale matricei:
| Variabil | Descriere |
|---|---|
|
@INC |
Conศine o listฤ de cฤi, unde modulele sau scripturile bibliotecii Perl pot fi analizate รฎn timp ce se executฤ scriptul curent. Acest @INC este folosit de utilizare ศi necesitฤ instrucศiuni pentru a cฤuta acele cฤi pentru modulele bibliotecii. |
|
@ARGV |
Stocheazฤ argumentele liniei de comandฤ transmise. |
|
@_ |
Folosit รฎn subrutine, รฎn timp ce trece parametrii la subrutine. |
|
@F |
Aceasta este matricea รฎn care sunt stocate liniile de intrare cรขnd auto split โa (este folosit comutatorul din linia de comandฤ). |
Variabile speciale Hash:
| Variabil | Descriere |
|---|---|
|
%INC |
Numele fiศierului va fi cheile; valorile vor fi calea cฤtre acele fiศiere. Folosit de do, use and require. |
|
%ENV |
Variabilele de mediu ale sistemului. |
|
%SIG |
Signalmanipulatorul lui. |
Expresia regulatฤ Perl
Ce este expresia regulatฤ?
Expresia regulatฤ Perl este suficient de puternicฤ รฎn potrivirea tiparelor ศirurilor dintr-o declaraศie sau un grup de instrucศiuni. Expresiile regulate sunt folosite mai ales รฎn analizarea textului, potrivirea modelelor ศi multe altele pe baza cerinศelor. Avem anumiศi operatori, care sunt utilizaศi รฎn mod special de legarea modelului de expresii regulate =~ ศi !~, Aceศtia sunt operatori de testare ศi de atribuire.
Expresie uzuala Operatori
Expresie uzuala Operators รฎn Perl
- Perl Match โ m//
- Substitut Perl โ s///
- Transliterat Perl โ tr///
รnainte de a merge mai departe, trebuie sฤ ศtim cรขteva lucruri despre expresia regulatฤ; existฤ anumite lucruri, cum ar fi caracterele meta, metacaractere รฎn sintaxa Perl Regex.
| Mangal | Sens |
|---|---|
|
\ |
Special sau citat |
|
* |
Potriviศi 0 sau mai multe caractere |
|
+ |
Potriviศi 1 sau mai multe caractere |
|
? |
Potriviศi 0 sau 1 caracter |
|
| |
Poate fi folosit pentru a potrivi modele alternative |
|
() |
Folosit pentru a stoca modelul potrivit |
|
[] |
Setul de caractere poate fi transmis. Folosit special pentru numere ศi alfabete. |
|
{} |
Folosit pentru a furniza numฤrul de timp รฎn care poate fi efectuatฤ meciul. |
|
^ |
รnceputul ศirului |
|
$ |
Sfรขrศitul ศirului |
|
\w |
Folosit pentru a potrivi un singur caracter sau cuvรขnt care poate fi alfanumeric, inclusiv โ_โ |
|
\W |
Potriviศi orice altceva decรขt alfanumeric |
|
\s |
Folosit pentru a potrivi spaศiile albe |
|
\S |
Potriviศi orice altceva decรขt spaศiul alb |
|
\d |
Potriviศi numerele. Nu valori zecimale ศi valori negative |
|
\D |
Potriviศi orice altceva decรขt numere. |
|
\t |
Potriviศi spaศiul pentru file |
|
\n |
Potriviศi noua linie |
Cele de mai sus sunt setul de caractere care pot fi folosite รฎn timpul potrivirii modelelor.
Sฤ vedem cรขteva exemple.
Luaศi รฎn considerare o situaศie รฎn care utilizatorul oferฤ o anumitฤ intrare รฎn timpul execuศiei scriptului ศi dorim sฤ verificฤm dacฤ utilizatorul a introdus un nume ca intrare sau nu. Trebuie sฤ scriem o sintaxฤ a expresiei regulate pentru a vฤ extrage numele ศi a imprima acelaศi lucru.
my $userinput="Guru99 Rocks";
if($userinput=~m/.*(Guru99).*/)
{
print "Found Pattern";
}
else
{
print "unable to find the pattern";
}
ieศire:
Model gฤsit
Aici, am scris expresia regulatฤ ca /.*(Guru99).*/.* potriveศte toate caracterele dintr-un ศir. A '.' รฎn perl regex match se referฤ la orice caracter, inclusiv spaศiu.
Sฤ vedem cum exact putem construi un Regex.
Luaศi รฎn considerare un exemplu de ศir de mai multe cuvinte ศi cifre ศi simboluri speciale precum acesta โBunฤ tuturor, acesta este numฤrul meu: +91-99298373639โ;
Regex: /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i
Cuvรขnt spaศiu cuvรขnt spaศiu cuvรขnt spaศiu cuvรขnt spaศiu cuvรขnt spaศiu cuvรขnt spaศiu caracter special : spaศiu caracter special + cifre caracter special โ cifre.
Perl Match Operatori
Operatorii de potrivire sunt utilizaศi pentru a potrivi un ศir รฎn cadrul unei instrucศiuni sau รฎntr-o variabilฤ.
my $var="Hello this is perl";
if($var=~m/perl/)
{
print "true";
}
else
{
print "False";
}
ieศire:
adevฤrat
Acest cod mic va afiศa โadevฤratโ, deoarece potrivirea modelului perl identificฤ ศirul รฎntr-o variabilฤ. Practic, Perl cautฤ textul furnizat รฎn // de-a lungul รฎntregului ศir, chiar dacฤ gฤseศte รฎntr-un singur loc, va returna โadevฤratโ. Modelul poate fi oriunde รฎn variabilฤ. Putem รฎncerca sฤ รฎnlocuim =~ cu !~ pentru a vedea diferenศa dintre aceศti doi operatori.
รnlocuire Perl OperaTdR
Acest operator poate fi folosit pentru cฤutarea ศi รฎnlocuirea oricฤrui caracter fie cu nul, fie cu alt caracter.
my $a="Hello how are you"; $a=~s/hello/cello/gi; print $a;
ieศire:
violoncel ce mai faci
Notฤ: De fapt, putem folosi orice ศir de potrivire a modelului, aศa cum am fฤcut mai devreme ศi รฎn acest operator de รฎnlocuire. Aici am folosit โgiโ, g-la nivel global, i-ignore majuscule.
Traducere Perl OperaTdR
Acest lucru este similar cu Substituศia, dar nu foloseศte nicio expresie regulatฤ perl, mai degrabฤ putem trece direct valoarea sau un cuvรขnt pe care dorim sฤ-l รฎnlocuim.
my $a="Hello how are you"; $a=~tr/hello/cello/; print $a;
ieศire:
Bunฤ vacฤ eศti
I/O fiศier Perl
Perl a fost conceput pentru a manipula fiศierele ศi operaศiunile I/O รฎn mod eficient. Principalul avantaj al Perl este รฎn analiza ศi manipularea fiศierelor. Existฤ multe funcศii รฎncorporate ศi operatori utilizaศi รฎn timpul manipulฤrii fiศierelor รฎn Perl.
Practic, operaศiunile de fiศiere care sunt efectuate cu Perl se fac folosind FILEHANDLE. Trebuie sฤ definim acest FILEHANDLE รฎn timpul deschiderii unui fiศier pentru citire sau scriere.
รn acest tutorial de script Perl, veศi รฎnvฤศa-
Perl Deschideศi fiศierul
Putem deschide un fiศier folosind funcศia open() disponibilฤ รฎn Perl.
open(FILEHANDLE, "filename or complete path of the file");
Acum am deschis un fiศier, acum apare o รฎntrebare. Este pentru citit sau pentru scris?
Fiศier de citire Perl ศi fiศier de scriere Perl
Perl are anumite moduri, care trebuie folosite pentru a citi, scrie sau ataศa un fiศier.
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");
Cรขteva exemple pentru citirea unui fiศier:

Luaศi รฎn considerare cฤ avem un fiศier perl cu numele file.txt ศi are cรขteva rรขnduri de text รฎn el. Trebuie sฤ deschidem acest fiศier ศi sฤ imprimฤm la fel.
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;
Aceasta va imprima conศinutul fiศierului pe ecranul de ieศire.
Acum, vom scrie un program pentru a crea ศi a scrie date รฎntr-un fiศier perl.

open(FH,">test.txt"); my $var=<>; print FH $var; close FH;
Aceasta va scrie intrarea furnizatฤ รฎn timpul rulฤrii ศi va crea un fiศier test.txt care va avea intrare.
Modul de mai sus va รฎncerca รฎntotdeauna sฤ creeze un fiศier numit test.txt ศi va scrie intrarea รฎn fiศier; vom scrie la fel pentru a adฤuga fiศierul.

open(FH,">>test.txt"); my $var=<>; print FH $var; close FH;
| Moduri | Descriere |
|---|---|
|
< |
Citiศi |
|
+< |
Citeศte ศi scrie |
|
> |
Creeazฤ, scrie ศi trunchiazฤ |
|
+> |
Citiศi, scrieศi, creaศi ศi trunchiaศi |
|
>> |
Scrie, anexeazฤ ศi creeazฤ |
|
+>> |
Citiศi, scrieศi, anexaศi ศi creaศi |
Acum cฤ trebuie sฤ vedem cum sฤ citim, sฤ scriem ศi sฤ ataศฤm fiศiere folosind exemple de bazฤ.
Vom mai vedea cรขteva exemple ศi alte funcศii care vฤ ajutฤ sฤ รฎnศelegeศi mai multe despre fiศiere.
Perl Tell
Aceastฤ metodฤ va returna poziศia curentฤ a FILEHANDLER รฎn octeศi dacฤ este specificatฤ altfel va considera ultima linie ca poziศie.
open(FH, "test.pl");
while(<FH>)
{
$a=tell FH;
print "$a";
}
Perl Seek
Funcศia de cฤutare este similarฤ cu apelul de sistem fseek. Aceastฤ metodฤ este utilizatฤ pentru a poziศiona indicatorul fiศierului รฎntr-o locaศie specificฤ prin specificarea octeศilor urmaศi fie de รฎnceputul indicatorului de fiศier, fie de sfรขrศitul indicatorului de fiศier.
seek FH, bytes, WHENCE;
WHENCE este poziศia pointerului fiศierului pentru a รฎncepe. Zero รฎl va seta de la รฎnceputul fiศierului.
Exemplu: Lฤsaศi input.txt sฤ aibฤ cรขteva date precum โBunฤ ziua, aceasta este lumea meaโ.
open FH, '+<','input.txt'; seek FH, 5, 0; # This will start reading data after 5 bytes. $/ = undef; $out = <FH>; print $out; close FH;
ieศire:
aceasta este lumea mea
Perl Deconectare
Deconectarea este folositฤ pentru a ศterge fiศierul.
unlink("filename or complete file path");
Gestionarea directoarelor:
De asemenea, putem gestiona directoare prin care putem gestiona mai multe fiศiere.
sฤ vedem cum sฤ deschidem un director. Putem folosi metodele opendir ศi 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);
Aceasta va imprima toate fiศierele disponibile รฎn acel director.
Teste de fiศiere Perl ศi semnificaศia lor
|
-r |
Pentru a verifica dacฤ fiศierul/directorul poate fi citit de utilizatorul/grupul curent |
|
-w |
Pentru a verifica dacฤ fiศierul/directorul poate fi scris de utilizatorul/grupul curent |
|
-x |
Pentru a verifica dacฤ Fiศierul/directorul este executabil de cฤtre utilizatorul/grupul curent |
|
-o |
Pentru a verifica dacฤ fiศierul/directorul este deศinut de utilizatorul curent |
|
-R |
Pentru a verifica dacฤ fiศierul/directorul poate fi citit de cฤtre acest utilizator/grup real |
|
-W |
Pentru a verifica dacฤ fiศierul/directorul poate fi scris de cฤtre acest utilizator/grup real |
|
-X |
Pentru a verifica dacฤ fiศierul/directorul este executabil de cฤtre acest utilizator/grup real |
|
-O |
Pentru a verifica dacฤ fiศierul/directorul este deศinut de acest utilizator real |
|
-e |
Pentru a verifica dacฤ numele fiศierului/directorului existฤ |
|
-z |
Pentru a verifica dacฤ fiศierul existฤ ศi are dimensiunea zero (รฎntotdeauna fals pentru directoare) |
|
-f |
Pentru a verifica dacฤ Entry este un fiศier simplu |
|
-d |
Pentru a verifica dacฤ Entry este un director |
|
-l |
Pentru a verifica dacฤ Entry este o legฤturฤ simbolicฤ |
|
-S |
Pentru a verifica dacฤ Entry este un socket |
|
-p |
Pentru a verifica dacฤ Entry este o conductฤ numitฤ (un โFIFOโ) |
|
-b |
Pentru a verifica dacฤ Entry este un fiศier special bloc (cum ar fi un disc montabil) |
|
-c |
Pentru a verifica dacฤ Entry este un fiศier cu caractere speciale (cum ar fi un dispozitiv I/O) |
|
-u |
Pentru a verifica dacฤ fiศierul sau directorul este setuid |
|
-g |
Pentru a verifica dacฤ fiศierul sau directorul este setgid |
|
-k |
Pentru a verifica dacฤ fiศierul sau directorul are setat bitul lipicios |
|
-t |
Handle-ul de fiศier dat este un TTY (ca prin funcศia de sistem isatty(), numele fiศierelor nu pot fi testate prin acest test) |
|
-T |
Pentru a verifica dacฤ Fiศierul aratฤ ca un fiศier โtextโ. |
|
-B |
Pentru a verifica dacฤ Fiศierul aratฤ ca un fiศier โbinarโ. |
|
-M |
Pentru a verifica vรขrsta de modificare (mฤsuratฤ รฎn zile) a fiศierului |
|
-A |
Pentru a verifica vรขrsta de acces (mฤsuratฤ รฎn zile) a fiศierului |
|
-C |
Pentru a verifica vรขrsta modificฤrii Inode (mฤsuratฤ รฎn zile) a fiศierului |
Subrutinฤ Perl
Ce este Subroutine?
Subrutine sunt similare cu funcศiile din alte limbaje de programare. Am folosit deja cรขteva funcศii รฎncorporate precum print, chomp, chop etc. Ne putem scrie propriile subrutine รฎn Perl. Aceste subrutine pot fi scrise oriunde รฎn program; este de preferat sฤ plasaศi subprogramele fie la รฎnceputul, fie la sfรขrศitul codului.

Exemplu de subrutine
sub subroutine_name
{
Statementsโฆ; # this is how typical subroutines look like.
}
Acum cฤ ศtim cum sฤ scriem o subrutinฤ, cum o accesฤm?
Trebuie sฤ accesฤm sau sฤ apelฤm o subrutinฤ folosind numele subrutinei prefixat cu simbolul โ&โ.
sub display
{
print "this is a subroutine";
}
display(); # This is how we call a subroutine
Transmiterea parametrilor Perl ศi a argumentelor Perl
Subrutinele sau funcศia perl sunt scrise pentru a plasa codul reutilizabil รฎn ele. Majoritatea codului reutilizabil necesitฤ ca parametrii sฤ fie transferaศi subrutinei. Aici, vom afla cum putem transmite argumente subrutinei.
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.
ieศire:
3 este valoarea transmisฤ
@_ este o variabilฤ matrice specialฤ care stocheazฤ argumentele transmise subrutinelor.
Perl Shift
De asemenea, putem folosi cuvรขntul cheie โshiftโ care schimbฤ cรขte un parametru la o variabilฤ sau $_[0],$_[1]... care este un element individual al matricei @_
sub display
{
my $var=shift;
print "$var is passed";
}
display("hello");
ieศire:
salut este trecut
Subrutinele sunt de obicei folosite รฎn programarea orientatฤ pe obiecte ศi, de asemenea, รฎn locuri รฎn care este posibil sฤ aveศi mai mult cod reutilizabil de plasat.
Funcศionalitatea principalฤ a subrutinelor este de a face o anumitฤ sarcinฤ ศi de a returna rezultatul codului reutilizabil.

Putem returna o valoare din subrutine folosind cuvรขntul cheie return.
sub add
{
my $a=shift;
my $b=shift;
return($a+$b);
}
my $result=add(5,6);
print $result;
ieศire:
11
$rezultatul va pฤstra valoarea adฤugatฤ a $a ศi $b.
De asemenea, putem trece hashuri ศi matrice direct subrutinei.
sub hash
{
my %hash=@_;
print %hash;
}
%value= ( 1=>'a', 2=>'b');
&hash(%value);
ieศire:
1a2b
De asemenea, putem returna un hash sau o matrice.
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;
ieศire:
รn interiorul subrutinei2b1aDupฤ apelul subrutinei2b1a
Formatul Perl
Perl are un mecanism prin care putem genera rapoarte. Folosind aceastฤ funcศie, putem face rapoarte exact aศa cum ne dorim รฎn timp ce imprimฤm pe ecranul de ieศire sau รฎntr-un fiศier. Un format simplu poate fi scris folosind funcศiile printf sau sprintf disponibile รฎn Perl.
printf "%05d\n", 30;
Aceasta va include zerouri รฎnaintea numฤrului 30, care face un numฤr total de cifre pรขnฤ la 5. Acelaศi lucru poate fi folosit pentru sprintf.
sprintf "%05d\n", 30; # This will print the same as printf.
Folosind printf ศi sprintf, putem obศine majoritatea formatelor Perl. รn cazul rapoartelor, va fi dificil de implementat.
================================================== =========================
Nume Adresฤ Vรขrsta Telefon
================================================== =========================
Krishna Chennai 24 929309242
Shruthi Chennai 24 929309232
Cele de mai sus sunt un exemplu de rapoarte pe care trebuie sฤ le imprimฤm รฎn acelaศi mod รฎn Perl. Acest lucru poate fi realizat folosind perl printf ศi perl sprintf. Poate fi implementat eficient folosind formatul.
Un format poate fi declarat รฎn modul de mai jos.
format FORMATNAME=FORMATLIST.
Aici, vom folosi o anumitฤ metodฤ de scriere pentru a tipฤri datele pe ecranul de ieศire sau รฎn fiศier.
| Simbol | Descriere |
|---|---|
|
@ |
Folosit pentru a reprezenta รฎnceputul deศinฤtorului cรขmpului |
|
> |
Alinierea la dreapta a textului |
|
< |
Alinierea la stรขnga a textului |
|
| |
Alinierea la centru |
|
# |
Numeric dacฤ sunt furnizate multiple #. Se presupune ca un comentariu dacฤ este furnizat un singur # |
|
. |
Punct zecimal |
|
^ |
Suportul de รฎnceput al cรขmpului poate fi folosit ศi pentru mai multe linii ศi, de asemenea, pentru รฎnfฤศurarea cuvintelor |
|
~ |
Linia ar trebui sฤ fie goalฤ dacฤ variabila este goalฤ |
|
@* |
Mai multe linii. |
($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
.
Executaศi codul pentru a vedea rezultatul.
Folosim simbolul @ pentru a specifica รฎnceputul deศinฤtorului cรขmpului sau al ศirului, โ<โ fiecare caracter.
Folosim STDOUT pentru a imprima pe ieศirea standard. Putem schimba acest lucru รฎn handler de fiศiere pe care รฎl folosim pentru a scrie date รฎn fiศier.
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
Putem รฎnlocui โ<โ cu โ>โ sau โ|โ pentru a schimba alinierea textului. STDOUT_TOP este folosit pentru a proiecta antetul formatului. Putem folosi acelaศi lucru cu gestionarea fiศierelor folosind FH_TOP (FH este gestionarea fiศierului). Acest lucru va scoate formatul รฎn fiศierul pe care รฎl lucrฤm pe.
Standarde de codare Perl
Fiecare programator va avea propriul simศ al scrierii codului folosind anumite standarde; aceste standarde ar trebui sฤ fie suficient de familiare pentru ca alศi programatori sฤ poatฤ รฎnศelege ศi sprijini codul รฎn mod corespunzฤtor.
Standarde de codare รฎn Perl
Scrierea codului este simplฤ ศi uศoarฤ. Problema apare atunci cรขnd trebuie รฎntreศinutฤ รฎn etapele ulterioare. รn timpul scrierii codului, trebuie respectate liniile directoare adecvate ศi standardele de codare. De asemenea, Perl defineศte anumite standarde care vor fi utile programatorilor pentru a scrie cod. Este recomandabil sฤ รฎncฤrcaศi โmodulul strictโ ศi โmodulul de avertizareโ รฎn timp ce scrieศi codul. Fiecare dintre aceste module are propria sa importanศฤ. Strict ne va face sฤ declarฤm variabila รฎnainte de a folosi ศi, de asemenea, va spune dacฤ existฤ vreun cuvรขnt gol รฎn codul dvs. Modulul de avertismente poate fi folosit alternativ prin trecerea opศiunii โ-wโ interpretului Perl รฎn shebang. Avertismentele vor fi tipฤrite pe ecranul de ieศire.
#!/usr/bin/perl โw
Mai jos sunt cรขteva liste de standarde.
- Utilizaศi modulul โstrictโ ศi โavertismenteโ.
- Eliminaศi variabila, care nu este utilizatฤ.
- Numele variabilelor ar trebui sฤ fie รฎnศelese de alศi utilizatori. Ex: $nume, @fileData etc.
- Documentaศia este necesarฤ รฎn timpul codificฤrii unui script.
- Nu codificaศi nicio valoare, mai degrabฤ รฎncercaศi sฤ le preluaศi dinamic sau cereศi utilizatorului sฤ le introducฤ รฎn timpul rulฤrii (calea fiศierului, numele fiศierelor).
- Maximizaศi reutilizarea codului. รncercaศi sฤ puneศi codul reutilizabil รฎn subrutine.
- Adicฤ, numele complete ar trebui date pentru subrutine.
- Subrutinele trebuie scrise cu comentarii ศi documentaศie corespunzฤtoare.
- Iniศializaศi รฎntotdeauna variabilele.
- Verificaศi รฎntotdeauna codurile de returnare pentru apelurile de sistem. Deschiderea unui fiศier se poate รฎntรขmpla sau nu, avรขnd un cod de returnare aici va afiศa starea de eroare dacฤ fiศierul nu existฤ.
Ex: deschis(FH,
- Subrutina ar trebui sฤ returneze รฎntotdeauna o valoare.
- Deschide creศ รฎn aceeaศi linie.
- O singurฤ linie BLOCK poate fi plasatฤ รฎntr-o singurฤ linie cu ondulat.
- Utilizaศi etichete รฎn timpul LOOP-urilor, ar fi uศor sฤ ieศiศi din buclฤ ori de cรขte ori este necesar.
- Folosiศi sublinierea รฎn timp ce frazele lungi de cuvinte sunt scrise ca nume de variabilฤ sau subrutinฤ.
- รncercaศi sฤ utilizaศi expresii regex simple รฎn timpul codificฤrii.
Exemplu perfect cu standarde de codare:
#######################################################################
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
Gestionarea erorilor Perl
Ce este o excepศie?
O excepศie este un eveniment care are loc รฎn timpul execuศiei programului ศi care va suspenda sau รฎnchide programul dumneavoastrฤ.
Gestionarea erorilor
Gestionarea erorilor este una de care fiecare programator trebuie sฤ aibฤ grijฤ รฎn timpul programฤrii. Perl oferฤ, de asemenea, tehnici de tratare a erorilor cu ajutorul cฤrora le putem capta erorile ศi le putem gestiona รฎn consecinศฤ.
Tratarea erorilor รฎn Perl
Existฤ multe modalitฤศi de a verifica dacฤ existฤ erori รฎn program. Trebuie sฤ examinฤm codurile de returnare ale funcศiei pe care o folosim. Dacฤ reuศim sฤ gestionฤm corect acele coduri de returnare, atunci cea mai mare parte a gestionฤrii erorilor poate fi realizatฤ.
Ce se va รฎntoarce รฎn cazul apelurilor de sistem?
รn cazul apelurilor de sistem, starea de returnare va fi stocatฤ รฎn douฤ variabile speciale $? ศi $!
$! โ Acest lucru va prinde numฤrul de eroare sau numฤrul de eroare asociat cu mesajul de eroare.
$? โ Aceasta va menศine funcศia return status system().
Folosind operatorul Perl sau logic
Putem folosi logic sau operator pentru gestionarea erorilor รฎn timpul utilizฤrii apelurilor de sistem.
ex:
open(FH,"<test.txt");
Acest lucru va deschide fiศierul รฎn modul de citire dacฤ fiศierul existฤ.
Ce se รฎntรขmplฤ dacฤ fiศierul lipseศte?
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
Funcศia Eval poate gestiona erorile fatale, erorile de timp de compilare, erorile de rulare ศi acele erori care terminฤ codul la un moment dat.
Funcศia Perl Eval poate avea un bloc de cod sau o expresie. Evals considerฤ tot ce este plasat รฎn el ca pe un ศir.
Luaศi รฎn considerare o situaศie de apelare a unei subrutine care nu este definitฤ รฎn script. รn aceastฤ situaศie, scriptul se terminฤ afirmรขnd โsubrutinฤ nedefinitฤ &XYZ, aceastฤ eroare poate fi gestionatฤ รฎn funcศia eval.
Existฤ multe utilizฤri ale blocului evals; o astfel de utilizare este atunci cรขnd dorim sฤ รฎncฤrcฤm modulul care este specific sistemului de operare รฎn timpul rulฤrii.
Ex: รmpฤrศirea la zero provoacฤ o eroare fatalฤ; pentru a gestiona acest lucru putem plasa codul รฎn blocul evals.
$a=5;
$b=0;
eval
{
'$result=$a/$b';
}
if($@)
{
print "$@"; # All the error codes returned by evals will get stored in $@.
}
ieศire:
eroare de sintaxฤ la C:\Users\XYZ\Text.pl linia 8, lรขngฤ โ)
{โ
Execuศia C:\Users\XYZ\Text.pl a fost รฎntreruptฤ din cauza erorilor de compilare.
Exemplu: eval folosind instrucศiunea perl die.
sub test
{
die "Dieing in sub test \n";
}
eval
{
test();
};
print "Caught : $@\n";
ieศire:
Prins: mor la subtest
Folosind Perl Try
Perl nu acceptฤ blocuri try, catch ศi รฎn final cod ca alte limbaje de programare. Le putem folosi รฎn continuare รฎncฤrcรขnd un modul extern Perl.
foloseศte Try::Tiny;
Folosind acest lucru, vฤ putem plasa codul รฎn blocul de รฎncercare ศi putem detecta eroarea din blocul de avertizare.
รn loc de $@ folosit รฎn eval Try::Tiny foloseศte $_.
# gestioneazฤ erorile cu un catch handler
try
{
die "Die now";
}
catch
{
warn "caught error: $_"; # not $@
};
Folosind in sfarsit.
my $y;
try
{
die 'foo'
}
finally
{
$y = 'bar'
};
try
{
die 'Die now'
}
catch
{
warn "Returned from die: $_"
}
finally
{
$y = 'gone'
};
ieศire:
foo la C:\Users\XYZ\Text.pl linia 4.
Putem folosi try, catch ศi รฎn sfรขrศit รฎn acest fel.
รฎncercaศi { # declaraศie }
catch {# declaraศie }
รฎn cele din urmฤ { # statement };
Or
try
{
# statement
}
finally
{
# statement
};
ieศire:
Or
try
{
# statement
}
finally
{
# statement
}
catch
{
# statement
};
ieศire:
Programare Perl Socket
Ce este o prizฤ?

Priza este un mediu prin care douฤ computere pot interacศiona รฎntr-o reศea folosind adresa ศi porturile de reศea.
Sฤ presupunem cฤ A (Server) ศi B (Client) sunt douฤ sisteme, care trebuie sฤ interacศioneze unul cu celฤlalt folosind Socket-uri pentru rularea unor programe.
Pentru a implementa acest lucru, trebuie sฤ creฤm socket-uri atรขt รฎn โโA (Server) cรขt ศi รฎn B (Client), A va fi รฎn starea de recepศie ศi B va fi รฎn starea de expediere.
A (Server):
Aici, serverul doreศte sฤ primeascฤ o conexiune de la B (Client) ศi sฤ execute unele sarcini ศi sฤ trimitฤ rezultatul รฎnapoi cฤtre B (Client). Cรขnd executฤm codul, sistemul de operare din A รฎncearcฤ sฤ creeze un socket ศi leagฤ un port la acel socket. Apoi va asculta de la expeditor care este B.
B (Client).
Aici, clientul doreศte sฤ trimitฤ un program din sistemul sฤu cฤtre A (Server) pentru procesare. Cรขnd executฤm codul, sistemul de operare din B รฎncearcฤ sฤ creeze un socket pentru comunicarea cu A (Server), B trebuie sฤ specifice adresa IP ศi numฤrul portului A la care B doreศte sฤ se conecteze.
Dacฤ acest lucru merge bine, ambele sisteme vor interacศiona pentru a schimba informaศii printr-un singur port. Perl acceptฤ ศi programarea socketului.
Perl are un API nativ prin care pot fi implementate socket-uri. Pentru a fi uศor, existฤ multe module CPAN prin care scriem programe socket.
Operaศiuni cu serverul:
- Creaศi socket
- Legaศi priza cu adresa ศi portul
- Ascultฤ socket-ul de pe adresa respectivฤ a portului
- Acceptaศi conexiunile client care รฎncearcฤ sฤ se conecteze folosind portul ศi IP-ul serverului
- Efectuaศi operaศiuni
Client Operaacศiuni:
- Creaศi socket
- Conectaศi-vฤ la server folosind adresa portului sฤu
- Efectuaศi operaศiuni

socket.io
Acesta este un modul pentru programarea socketului, care se bazeazฤ pe programarea orientatฤ pe obiecte. Acest modul nu acceptฤ tipul de reศea INET utilizat รฎn reศele.
IO::Socket::INET:
Acest modul acceptฤ domeniul INET ศi este construit pe IO::Sockets. Toate metodele disponibile รฎn IO::Sockets sunt moศtenite รฎn modulul INET.
Client ศi server folosind protocolul TCP:
TCP este un protocol orientat spre conexiune; vom folosi acest protocol pentru programarea socketului.
รnainte de a continua, sฤ vedem cum putem crea un obiect pentru modulul IO::Socket::INET ศi sฤ creฤm un socket.
$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";
Noua metodฤ din modulul IO::Socket::INET acceptฤ un hash ca parametru de intrare รฎn subrutinฤ. Acest hash este predefinit ศi trebuie doar sฤ furnizฤm valorile cheilor pe care dorim sฤ le folosim. Existฤ o listฤ de chei utilizate de acest hash.
|
PeerAddr |
Adresฤ gazdฤ de la distanศฤ |
|
PeerHost |
Sinonim pentru PeerAddr |
|
PeerPort |
Port la distanศฤ sau serviciu |
|
LocalAddr |
Adresฤ de legare a gazdei locale |
|
Gazdฤ localฤ |
Sinonim pentru LocalAddr |
|
Local Port |
Port de legare a gazdei locale |
|
Proto |
Numele protocolului (sau numฤrul) |
|
Tip |
Tipul soclului |
|
Asculta |
Dimensiunea cozii pentru ascultare |
|
ReutilizareAddr |
Setaศi SO_REUSEADDR รฎnainte de legare |
|
Reutilizare |
Setaศi SO_REUSEADDR รฎnainte de legare |
|
ReutilizaศiPort |
Setaศi SO_REUSEPORT รฎnainte de legare |
|
Difuza |
Setaศi SO_BROADCAST รฎnainte de legare |
|
Pauzฤ |
Valoarea timeout pentru diferite operaศiuni |
|
MultiHomed |
รncercaศi toate adresele pentru gazde multihomed |
|
Blocarea |
Stabiliศi dacฤ conexiunea va fi modul de blocare |
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);
Notฤ:
รn programarea socketului, va trebui sฤ executฤm mai รฎntรขi Server.pl ศi apoi client.pl individual รฎn diferite prompturi de comandฤ dacฤ rulฤm pe gazda localฤ.
Ce este modulele ศi pachetele Perl
Modulele ศi pachetele sunt strรขns legate รฎntre ele ศi sunt independente. Pachetul: Un pachet Perl este cunoscut ศi sub numele de spaศiu de nume ศi are toate variabilele unice utilizate, cum ar fi hash-uri, matrice, scalari ศi subrutine. Modul: Modulul este o colecศie de cod reutilizabil, รฎn care scriem subrutine รฎn el. Aceste module pot fi รฎncฤrcate รฎn programe Perl pentru a utiliza subrutinele scrise รฎn acele module.
Ce sunt modulele Perl?
Modulele standard vor fi instalate รฎn timpul instalฤrii Perl pe orice sistem. CPAN: Perl cuprinzฤtor Archive Network โ Un depozit global de module Perl. Modulele noastre Perl personalizate, care pot fi scrise de noi. Practic, un modul atunci cรขnd este รฎncฤrcat รฎn orice script va exporta toate variabilele ศi subrutinele sale globale. Aceste subrutine pot apela direct ca ศi cum ar fi fost declarate รฎn scriptul รฎnsuศi. Modulele Perl pot fi scrise cu extensia .pm la numele de fiศier Ex: Foo.pm. Un modul poate fi scris folosind โpachetul Fooโ la รฎnceputul programului.
Modulul de bazฤ 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;
Fฤrฤ ieศire
Pentru a folosi acest modul Perl, trebuie sฤ-l plasฤm รฎn directorul de lucru curent.
Putem รฎncฤrca un modul Perl folosind require sau use oriunde รฎn cod. Diferenศa majorฤ รฎntre necesitฤ ศi utilizare este, necesitฤ modul รฎncฤrcat รฎn timpul rulฤrii ศi รฎncฤrcฤrile de utilizare รฎn timpul compilฤrii.
#!/usr/bin/perl require Arithmetic; print Arithmetic::add(5,6); print Arithmetic:: subtract (5,6);
Aici, รฎn exemplul de mai sus, accesฤm subrutinele folosind numele complet calificat al modulului.
De asemenea, putem accesa pachetul folosind โutilizaศi aritmeticaโ.
Exportator:
Acest modul are o funcศionalitate implicitฤ a metodelor de import.
#!/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;
Matricea @EXPORT poate fi folositฤ pentru a transmite o listฤ de variabile ศi subrutine care, implicit, vor fi exportate apelantului Modulului.
Matricea @EXPORT_OK poate fi folositฤ pentru a transmite o listฤ de variabile ศi subrutine care vor fi exportate la cerere, unde utilizatorul trebuie sฤ specifice รฎn timpul รฎncฤrcฤrii modulului.
#!/usr/bin/perl use Arithmetic qw(subtract); print add(5,6); print subtract (5,6);
รn mod implicit, adฤugarea subrutinei va fi exportatฤ. Metoda de scฤdere nu va fi exportatฤ dacฤ nu este specificatฤ รฎn timpul รฎncฤrcฤrii modulului.
Programare orientatฤ pe obiecte รฎn Perl
รn aceastฤ secศiune, vom รฎnvฤศa cum sฤ creฤm module Perl orientate pe obiecte. Mai รฎntรขi, sฤ vedem care este obiectul? Un obiect este o instanศฤ prin care putem accesa, modifica ศi localiza anumite date din orice modul Perl. Acest lucru nu este altceva decรขt sฤ faceศi pachetul, variabilele ศi subrutinele existente Perl sฤ acศioneze ca o clasฤ, obiecte ศi metode รฎn raport cu alte limbaje de programare.
Creaศi o clasฤ
ศtim deja cum sฤ creฤm module din subiectul anterior. Scopul clasei este de a stoca metode ศi variabile. Un Modul Perl va avea subrutine care sunt metode. Trebuie sฤ accesฤm acele variabile ศi obiecte subrutine.
Constructor Perl
Un constructor รฎn Perl este o metodฤ care va executa ศi ne va returna o referinศฤ cu numele modulului etichetat la referinศฤ. Aceasta se numeศte binecuvรขntare a clasei. Folosim o anumitฤ variabilฤ pentru binecuvรขntarea unei clase perl, care este 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;
Noua metodฤ folositฤ ca constructor pentru o clasฤ, Acest constructor va crea un obiect pentru noi ศi va reveni la scriptul care apeleazฤ acest constructor.
#!/usr/bin/perl use Arithmetic; my $obj= Arithmetic->new(); my $result= $obj->add(5,6); print "$result"; $result = $obj->subtract(6,5); print "$result";
Aici, trebuie sฤ รฎnศelegem cum a fost creat obiectul. Ori de cรขte ori รฎncercฤm sฤ creฤm un obiect pentru clasฤ, trebuie sฤ folosim numele complet al clasei. Sฤ presupunem cฤ, dacฤ clasa perl este localizatฤ รฎn vreun lib\Math\Arithmetic.pm. ศi, dacฤ vrem sฤ accesฤm aceastฤ clasฤ perl din directorul lib, atunci trebuie sฤ furnizฤm รฎntreaga cale cฤtre clasฤ รฎn timp ce apelฤm scriptul.
utilizaศi lib::Math::Aritmeticฤ;
my $obj = lib::Math::Arithmetic->new();
Aศa se รฎntรขmplฤ crearea obiectului รฎn Perl.
@INC:
Cum ศtie scriptul Perl unde existฤ modulul de bibliotecฤ? Perl ศtie doar despre directorul curent al scriptului ศi calea bibliotecii รฎncorporate รฎn Perl. Ori de cรขte ori folosim modulul Perl, care nu se aflฤ รฎn directorul curent sau Calea bibliotecii Perl, scriptul va eศua รฎntotdeauna. Despre @INC, acesta este un tablou, care deศine toate cฤile directoarelor unde trebuie sฤ caute modulele Perl. รncercaศi sฤ executaศi aceastฤ comandฤ ศi vedeศi care va fi rezultatul.
perl โe "print @INC"
Acest lucru va oferi o ieศire ศi aceasta este calea รฎn care vor fi disponibile modulele lib. Ori de cรขte ori folosim un nou modul de bibliotecฤ, trebuie sฤ รฎi spunem lui Perl, interpretului, sฤ caute acea locaศie specialฤ รฎn care este disponibil modulul Perl.
push(@INC, "PATH TO YOUR MODULE");
Faceศi din aceasta prima linie de cod. Aceasta รฎi va spune interpretului tฤu sฤ caute รฎn acea Cale. sau utilizare
lib Arithmetic; # List here is your Perl Module location
Perl Destructor
Destructorul unui obiect este apelat implicit la sfรขrศitul ศi รฎnainte de ieศirea scriptului. Acesta este folosit pentru a vฤ distruge obiectele din memorie.
PERL V/s Shell Scripting
- Programarea รฎn Perl nu provoacฤ probleme de portabilitate, ceea ce este obiศnuit atunci cรขnd se utilizeazฤ diferite shell-uri รฎn scripturile shell.
- Gestionarea erorilor este foarte uศoarฤ รฎn Perl
- Puteศi scrie cu uศurinศฤ programe lungi ศi complexe pe Perl datoritฤ vastitฤศii sale. Acest lucru este รฎn contrast cu Shell care nu acceptฤ spaศii de nume, module, obiect, moศtenire etc.
- Shell are mai puศine biblioteci reutilizabile disponibile. Nimic รฎn comparaศie cu CPAN-ul lui Perl
- Shell este mai puศin sigur. Apeleazฤ funcศii externe (comenzi precum mv, cp etc depind de shell-ul utilizat). Dimpotrivฤ, Perl face lucrฤri utile รฎn timp ce foloseศte funcศii interne.
Cum este utilizat PERL รฎn testarea automatizฤrii
Perl este utilizat pe scarฤ largฤ รฎn automatizare. Poate cฤ nu este cel mai bun limbaj de programare din lume, dar este cel mai potrivit pentru anumite tipuri de sarcini. Sฤ discutฤm unde ศi de ce este folosit Perl Testarea automatizฤrii.
Testarea stocฤrii
Ce este stocarea? Date stocate รฎn Fiศiere.
Sฤ presupunem cฤ avem un depozit legat Caz de testare unde trebuie sฤ scriem date pe o partiศie, sฤ o citim ศi sฤ verificฤm dacฤ datele sunt scrise corect.
Acest lucru se poate face manual, dar poate un tester manual sฤ facฤ acelaศi lucru de 10000 de ori? Va fi un coศmar! Avem nevoie de automatizare
Cel mai bun instrument de automatizare a oricฤrui lucru legat de stocare este Perl datoritฤ tehnicilor sale de manipulare a fiศierelor, REGEX ศi analiza puternicฤ a fiศierelor, care consumฤ cel mai puศin timp de execuศie รฎn comparaศie cu alte limbaje de programare.
De ce trebuie sฤ testฤm stocarea? Gรขndiศi-vฤ la centrele de date mari รฎn care datele vor curge continuu de la un sistem la altul, cu 1000 de รฎnregistrฤri stocate pe secundฤ. Testarea robusteศei unui astfel de mecanism de stocare este esenศialฤ.
Multe companii precum HP, Dell, IBM ศi multe producศii de servere folosesc Perl ca interfaศฤ pentru a testa funcศionalitatea รฎn domeniile de stocare ศi reศea. NetApp este una dintre aceste companii care lucreazฤ complet pe stocare ศi foloseศte Perl ca limbaj de programare pentru a automatiza cazurile de testare.
Dacฤ sunteศi interesat de Perl Automation, atunci ar fi recomandabil sฤ aflaศi despre Storage & Networking Concepts.
Testare server ศi reศea:
Testarea serverului ศi a reศelei folosind Perl
PERL este utilizat pe scarฤ largฤ รฎn monitorizarea timpului de funcศionare ศi a performanศei serverului.
Luaศi รฎn considerare un centru de date care are 100 de gazde (servere). Vi se cere sฤ vฤ conectaศi la fiecare gazdฤ, sฤ executaศi unele comenzi de la distanศฤ. De asemenea, doriศi sฤ reporniศi sistemul ศi sฤ verificaศi cรขnd revine online.
Efectuarea manualฤ a acestei sarcini pentru toate cele 100 de gazde va fi un coศmar. Dar putem automatiza cu uศurinศฤ acest lucru folosind PERL
Proiectaศi paศi pentru a realiza aceastฤ automatizare de mai sus folosind PERL
- Preluaศi informaศii din fiศierul despre informaศiile gazdei, cum ar fi (IP, Nume de utilizator ศi Parolฤ).
- Utilizaศi Net::SSH2 pentru a vฤ conecta la fiecare sistem ศi a stabili un canal pentru a executa comenzile.
- Executaศi setul de comenzi necesare, de exemplu: ls, dir, ifconfig,ps etc.
- Reporniศi sistemul.
- Aศteptaศi 10 minute pentru ca sistemul sฤ porneascฤ.
- Faceศi ping sistemului utilizรขnd modulul Net::Ping ศi imprimaศi starea.
Vom codifica scenariul de mai sus.
Sฤ luฤm un fiศier numit Input.txt care va stoca informaศiile complete despre toate gazdele รฎn care trebuie sฤ ne conectฤm ศi sฤ executฤm comanda.
Intrare.txt
192.168.1.2 parola root
192.168.1.3 parola root
192.168.1.4 rฤdฤcinฤ rฤdฤcinฤ123
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";
}
}
Testare Web
Perl nu este limitat doar la testarea stocฤrii ศi reศelei. De asemenea, putem efectua teste bazate pe Web folosind PERL. WWW-Mecanizare este un modul folosit pentru testarea web. Practic, nu va lansa niciun browser pentru a testa funcศionalitatea aplicaศiei web, ci foloseศte codul sursฤ al paginilor html.
De asemenea, putem efectua teste bazate pe browser folosind Selenium IDE, RC, driver web. Perl este suportat pentru Selenium.
\nโ; #aceasta va pฤstra ศirul rฤmas dupฤ ce se terminฤ potrivirea patterului.
imprimare "





