Tutorial Perl: variabilă, matrice, hashuri cu exemplu de programare
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 |
---|---|
< |
Citeste |
+< |
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 "