Perl Tutorial: Variable, Array, Hashes med programmeringseksempel
Hvad er Perl?
Perl er et fortolket, dynamisk programmeringssprog på højt niveau, generelt til formål. Perl er et udtryk, der står for "Praktisk udvinding og rapporteringssprog", selvom der ikke er et akronym for Perl. Det blev introduceret af Larry Wall i 1987. Perl-sproget var specielt designet til tekstredigering. Men nu er det meget brugt til en række formål, herunder Linux-systemadministration, netværksprogrammering, webudvikling osv.
Lad os sige det på en enkel måde. Mens computere kun forstår 0'er og 1'er (binært sprog/maskinsprog/ [lavt sprog]), er det meget svært at programmere i et binært sprog for os mennesker. Perl er et programmeringssprog, som bruger naturlige sprogelementer, ord, der bruges i almindeligt engelsk sprog, og som derfor er lettere at forstå af mennesker [sprog på højt niveau]. Nu er der et problem; computere kan ikke forstå sprog på højt niveau, som vi mennesker sagtens kan forstå. Til det har vi brug for noget, der kan oversætte sprog på højt niveau til sprog på lavt niveau. Her kommer tolk til vores hjælp. Tolken er et stykke software, som konverterer programmet skrevet på højniveausproget til lavniveausprog, så computeren kan forstå og udføre instruktionerne skrevet i programmet. Derfor er Perl en fortolket programmeringssprog.
Hvor bruges Perl?
Kraften i Perl scriptsprog kan implementeres på mange områder. Den mest populære brug af Perl er i webudvikling. Perl bruges også til at automatisere mange opgaver på webservere, og andre administrationsjobs, den kan automatisk generere e-mails og rydde op i systemer. Perl bruges stadig til dets oprindelige formål, dvs. at udtrække data og generere rapporter. Det kan producere rapporter om ressourceforbrug og kontrollere for sikkerhedsproblemer i et netværk. På grund af denne grund er Perl også blevet et populært sprog, der bruges i webudvikling, netværk og bioinformatik. Ud over alt dette kan perl også bruges til CGI-programmering.
Perl kan også bruges til billedoprettelse og -manipulation. Ud over at netværk via telnet, FTP osv., er oprettelse af grafisk brugergrænseflade, VLSI-elektronik og oprettelse af mailfiltre for at reducere spamming-praksis nogle anvendelsesmuligheder af Perl.
Perl er også kendt for implementering af OOP (objektorienteret programmering) praksis og understøtter alle former for arv (simpel, multiple & diamant), polymorfi og indkapsling. Perl er fleksibel nok til at understøtte både proceduremæssige og OOP-praksis på samme tid. Perl har også ekstra moduler, som giver dig mulighed for at skrive eller bruge/genbruge kode skrevet ind Python, PHP, PDL, TCL, Octave, Java, C, C++, Basic, Ruby og Lua i dit Perl-script. Det betyder, at du kan kombinere Perl med disse ekstra programmeringssprog snarere at omskrive eksisterende kode.
Hvorfor bruge Perl?
Det er rigtigt, at der er andre programmeringssprog, der kan bruges til at gøre alle de ting, der er blevet nævnt ovenfor, hvorfor skulle du så specifikt bruge Perl? Perl er meget let at lære, især hvis du har en baggrund inden for computerprogrammering. Perl er designet til at være let for mennesker at skrive og forstå i stedet for at gøre det nemt at behandle på computere. Den bruger regulære udtryk. Dets naturlige sprogstil er forskellig fra andre programmeringssprog, der bruger specifik grammatik og syntakser; Derfor er Perl meget fleksibel og pålægger dig ikke nogen særlig måde at udtænke en løsning eller et problem på. Perl er ekstremt bærbar. Det kan køre på ethvert operativsystem, der har Perl-fortolker installeret, så det er platformsuafhængigt. Alt sammen Linux Operating Systems kommer installeret med Perl, så du kan starte Perl-kodning i Linux lige ud af æsken. Dette er i modsætning til Shell-scripts, hvor koden ændres med smagen af Linux-distribution, der bruges, hvilket gør den mindre og mindre bærbar Små specifikke opgaver i Perl bliver meget nemme og hurtige. Igennem denne Perl-tutorial for begyndere lærer du, hvordan du kan kode små, hurtige programmer til specifikke opgaver. Lad os tage et simpelt eksempel på det klassiske Hello World-program, som bruges til at begynde at lære et hvilket som helst programmeringssprog, der har UNIX som sine rødder:
Eksempel: Perl hej verden
#!/usr/bin/perl print "Hello, world!";
Output:
Hej verden!
Ovenstående to linjer kode vil udskrive Hej, verden! Var det nu ikke for enkelt og hurtigt? Studerende med viden om C, C++ vil vide, at det kræver mange flere linjer kode at opnå det samme output på disse sprog.
Du undrer dig måske over hvorfor Perl er så berømt på nettet. Det er enkelt, da de fleste af de ting, der sker på nettet, er af TEXT, og Perl er meget god til tekstbehandling. Hvis vi sammenligner Perl med et af sprogene, vil Perl være det bedste sprog, som er godt i filhåndtering, tekstbehandling og outputrapportering
En af de bedste fordele ved Perl er, at det er det gratis at bruge
Perl-fællesskabet er overbevist om, at software skal være frit tilgængeligt, frit modificerbart og frit distribuerbart. Flere frivillige fra Perl-samfundet stræber efter at gøre programmeringssproget så godt som muligt.
Fordele og ulemper ved Perl
Fordele: | Ulemper: |
---|---|
|
|
Lad os komme igang
Med tilstrækkelig viden om Perls historie og grundlæggende begreber inden for computerprogrammering, der kræves til kodning i Perl, er det på tide, at vi tager dykket og kommer i gang med Perl. Det næste kapitel vil lære dig, hvordan du kan konfigurere Perl på dit system og gøre dig klar til kodningsrejsen i Perl. Denne Perl scripting tutorial vil tage Linux som det OS, som eleverne vil bruge til kodning i Perl.
Download og installer Perl – Windows, Mac og Linux
Hvordan får man Perl?
Gode nyheder du har det sikkert!
Men hvis du ikke allerede kan finde det på dit system, kan du stadig få det gratis.
For at finde ud af, om du allerede har Perl installeret, skal du gå ind på kommandolinjen og skrive: perl -v
Kommandoen viser version af Perl, hvis den er installeret. I dette tilfælde er versionen v5.14.2. Men hvis ikke... så gå ikke i panik...
Unix | Allerede installeret Leveres forudinstalleret med Perl, selvom du muligvis skal opdatere til den nyeste version. |
Mac OS | Allerede installeret OSX leveres med Perl forudinstalleret, selvom du muligvis skal opdatere den til den nyeste version |
Windows | Skal installeres To muligheder er tilgængelige
|
Opdatering af Perl på Linux:
Hvis du har brug for at opdatere Perl-versionen, skal du blot indtaste en enkelt kommandolinje
sudo apt-get install perl
og slappe af. Resten bliver der taget hånd om. Bare sørg for, at du har en aktiv internetforbindelse.
Installer perl til Windows:
Først skal du downloade Active Perl fra denne link. Følg disse trin for at installere ActivePerl på Windows system. Se nedenstående skærmbilleder for det samme.
Trin 1: Når du har downloadet installationsprogrammet og starter installationen, vil du se nedenstående vindue, klik på næste for at fortsætte.
Trin 2: Accepter licensaftalen for at fortsætte installationen.
Trin 3: Nedenfor er forskellige pakker, der vil blive installeret. Som standard vil alle blive valgt. Det eneste, der er anderledes, er PPM (Perl Package Manager). Dette er hjælpeprogrammet leveret af Active Perl til at installere eksterne Perl-moduler eller -biblioteker i dit system. Klik på Næste for at fortsætte.
Trin 4: Dette er forskellige typer af Perl-udvidelser, der kan bruges til Perl. For det meste vil vi bruge .Pl, .Plx og .Pm til Perl. Perl-moduler bruger grundlæggende .Pm som deres filtypenavn til at henvise til en biblioteksfil. Vælg alle muligheder, og klik på knappen Næste.
Trin 5: Klik på knappen Installer for at fortsætte med installationen.
Trin 6: Når det er installeret, skal du udføre kommandoen 'Perl –v' for at kontrollere, om Perl er installeret korrekt på dit system.
Der er mange ting, der skal diskuteres for at indstille Perl-miljøet i både Linux og Windows, da der ikke vil være mange biblioteksfiler inkluderet i denne installation. Du skal manuelt installere dem. Du kan installere dem manuelt ved hjælp af CPAN (Comprehensive Perl Archive Network) eller enten PPM, som kun virker for perl-vinduer. Men disse filer er ikke obligatoriske for at starte kodning i Perl.
Bortset fra denne Windows-opsætning kan du bruge Windows 10's nye funktion i Linux-undersystemet over Windows og brug den til at køre perl-kode
Første Perl-program
Hello world!
Perl-eksempel: Hello World
#!/usr/bin/perl -w #this is just a comment… print "Hello World";
Bare rolig, hvis du ikke forstår denne tekst. Alt vil snart være klart. Kom nu og se det på linje:
#!/usr/bin/perl
Dette fortæller Operating System til at udføre denne fil med programmet placeret på /usr/bin/perl Nogle IDE'er har ikke brug for denne linje. Hvis det er nødvendigt, skal du her skrive en vej til din tolk. Husk! Denne særlige linje skal være i begyndelsen af dit program og skal starte fra #! brug advarsler; Dette er en anden speciel kommando, som fortæller tolken at vise alle advarsler, dvs. -w som aktiverer advarsler globalt.
print "Hello World";
Printinstruktionen skriver tekst til skærmen. Semikolonet i slutningen af linjen fortæller perl-fortolkeren, at instruktionen er færdig. Du skal sætte et semikolon i slutningen af hver instruktion i Perl-kode. Bemærk anførselstegn(“). Det er nødvendigt for printinstruktion. Gem ovenstående script som firstprog.pl
On Windows
Hvis du har Strawberry installeret, kan du blot klikke på Kør. Du kan også køre kommandolinjegrænseflade og skrive på konsollen:
C:\> perl path\firstprog.pl
eller, hvis perl.exe ikke er i din sti:
C:\> c:\perl\bin\perl.exe firstprog.pl
På Linux/Unix
Du skal bare åbne terminalen og skrive:
perl firstprog.pl
Hvis du ikke kan køre programmet, skal du sørge for, at du er berettiget til at køre det. Indtast terminalen:
chmod +x firstprog.pl
Dit program er nu eksekverbart og klar til at køre. For at udføre, skriv:
./firstprog
Installer cpan minus moduler
Moduler er sæt koder, der bruges til at udføre opgaver, der udfører almindelige operationer i flere programmer. Hvis du bruger perl-moduler, behøver du ikke at omskrive koderne for at udføre den samme handling. Perl kan gøre brug af sådanne eksterne biblioteker af koder. Et af de bedste biblioteker er CPAN. Det står for Comprehensive Perl Archive Network og indeholder en stor mængde Perl-moduler, som du kan bruge. Det er et fællesskab eller netværk af et stort antal udviklere, der bidrager med sådanne moduler. Ved at installere understøttelse af CPAN-moduler i dit perl-modul, kan du gøre brug af CPAN-modulerne og gøre dit arbejde lettere. De fleste Perl-moduler er skrevet i Perl, nogle bruger XS (de er skrevet i C) så kræver en C-compiler (det er nemt at få denne opsætning – gå ikke i panik. Moduler kan have afhængigheder af andre moduler (næsten altid på CPAN) og kan ikke installeres uden dem (eller uden en specifik version af dem) Det er værd at læse dokumentationen for nedenstående muligheder Hent, udpak, byg og installer moduler fra CPAN for at gøre installationen af andre moduler nemmere (du takker os senere for at installere). App-cpanminus perl-moduler, i kommandolinjetypen:
cpan App::cpanminus
cpan App::cpanminus Sørg for, at du har internetforbindelse, mens perl-moduler downloades og installeres.
Installer nu ethvert modul:
cpan –i <Module_Name>.
Lad os se et eksempel på installation af et modul File::Data(Det er en grænseflade til at få adgang til fildata).
Perl Variabel
Nu vil vi tale om variabler. Du kan forestille dig en variabel-lignende type container, som indeholder en eller flere værdier. Når den er defineret, forbliver navnet på variabelen det samme, men værdien eller værdierne ændres igen og igen.
Der er 3 typer variabler:
De nemmeste er skalarer, og det er vores emne i dag
Skalar variabel
Denne type variabel har en enkelt værdi.
Dens navn begynder med et dollartegn og et Perl-id (det er navnet på vores variabel).
Navngivningskonvention
Hvis du er fortrolig med andre programmeringssprog, så ville du vide, at der er visse regler om navngivning af variabler. På samme måde har Perl tre regler for navngivning af skalarer.
- Alle skalarnavne begynder med en $. Det er nemt at huske at præfikse hvert navn med $. Tænk på det som en $skalar.
- Ligesom PHP. efter det første tegn $, som er specielt i Perl, er alfanumeriske tegn, dvs. a til z, A til Z og 0 til 9 tilladt. Understregningstegn er også tilladt. Brug understregning til at opdele variabelnavnene i to ord. "Men det første tegn kan ikke være et tal"
- Selvom tal kan være en del af navnet, kan de ikke komme umiddelbart efter $. Dette indebærer, at det første tegn efter $ enten vil være et alfabet eller en understregning. Dem der kommer fra C/C++ baggrund skal umiddelbart kunne genkende ligheden. Eksempler
Perl-eksempel:
$var; $Var32; $vaRRR43; $name_underscore_23;
Disse er dog ikke lovlige skalarvariablenavne.
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
Den generelle regel siger, at når Perl kun har en af noget, er det en skalar. Skalarer kan læses fra enheder, og vi kan bruge det til vores programmer.
To typer skalardatatyper
- Numbers
- Strings
Numbers:
I denne type skalardata kunne vi specificere:
- heltal, det er simpelthen hele tal, som 2, 0, 534
- floating-point tal, det er reelle tal, som 3.14, 6.74, 0.333
Bemærk: Generelt ser Perl-fortolkeren heltal som flydende kommatal. For eksempel, hvis du skriver 2 i dine programmer, vil Perl se det som 2.0000
Heltals bogstaver:
Den består af et eller flere cifre, eventuelt foranstillet af et plus eller minus og indeholder understregninger.
Perl-eksempler:
0; -2542; 4865415484645 #this also can be written with underscores (for clarity) : 4_865_415_484_645
Som du kan se - det er ikke noget særligt. Men tro mig, dette er den mest almindelige type skalarer. De er overalt.
svævende bogstaver:
Den består af cifre, eventuelt minus, decimaltegn og eksponent.
Perl-eksempler:
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
Oktal, hexadecimal og binær repræsentation:
Det er et alternativ til decimalsystemet. Tillad mig at vise dig oktal, hexadecimal og binær repræsentation. En kort tabel præsenterer alle vigtige oplysninger om denne mærkelige stil:
Repræsentation | Base | Fortsat af |
---|---|---|
Octal | 8 | 0 (nul) |
Hexadecimal | 16 | 0x |
Binary | 2 | 0b |
Perl-eksempler:
255; # 255 in decimal notation 0377; # 255 in octal notation 0xff; # 255 in hexadecimal notation 0b11111111; # 255 in binary notation
Alle disse værdier for Perl betyder det samme. Perl gemmer ikke værdierne i samme format. Det vil internt konvertere disse hexadecimale, binære, oktale til decimale værdier.
Opgaven er den mest almindelige operation på en skalar, og den er meget enkel. Perl bruger for det lighedstegn. Det tager en værdi af udtrykket fra højre side og sætter denne værdi til vores variabel.
Lad os tage et kig på eksempler:
$size=15; # give $size value of 15 $y = -7.78; # give $y value of -7.78
Hvad mere er, du kan indsætte variabel ikke kun et tal, men også et udtryk.
$z = 6 + 12 # give $z value of 18
Strings
Strings: Det er også en meget enkel type skalar.
Den maksimale længde af en streng i Perl afhænger af mængden af hukommelse, computeren har. Der er ingen grænse for størrelsen af strengen, enhver mængde af tegn, symboler eller ord kan udgøre dine strenge. Den korteste streng har ingen tegn. Den længste kan fylde hele systemets hukommelse. Perl-programmer kan skrives udelukkende i 7-bit ASCII-tegnsæt. Perl giver dig også mulighed for at tilføje ethvert 8-bit eller 16-bit tegnsæt aka. ikke-ASCII-tegn i streng-literal. Perl har også tilføjet understøttelse af Unicode UTF-8.
Ligesom tal er der to forskellige typer strenge:
- Enkelte citatstrenge bogstaver
- Double citater strenge bogstaver
Ordretal af strenge med citater
Enkelte anførselstegn bruges til at omslutte data, du ønsker skal tages bogstaveligt. Et kort eksempel og alt skal være klart:
Perl-eksempler:
#!/usr/bin/perl $num = 7; $txt = 'it is $num'; print $txt;
Output:
det er $num
Her på grund af enkelte anførselstegn er værdien af $num ikke taget, og de bogstavelige tegn '$','n', 'u' & 'm' tilføjes til værdien af $txt
Double-citerede strenge bogstaver
Double anførselstegn bruges til at omslutte data, der skal interpoleres før behandling. Det betyder, at escapede tegn og variabler ikke blot bogstaveligt talt indsættes i senere operationer, men evalueres på stedet. Escape-tegn kan bruges til at indsætte nye linjer, faner osv.
Perl-eksempler:
$num = 7; $txt = "it is $num"; print $txt;
Output:
det er 7
Her på grund af dobbelte anførselstegn lægges værdien af $num til værdien af $txt
Double-citater interpolerer skalar- og matrixvariabler, men ikke hashes. På den anden side kan du bruge dobbelte anførselstegn til at interpolere udsnit af både arrays og hashes.
Mystisk \n
Overvej følgende program
Perl-eksempler:
print "hello \n";
Output:
Hej
Perl viser ikke kun 'hej\n', men kun 'hej'. Hvorfor? Fordi '\n' er et særligt tegn og betyder, at du vil gå til en ny linje, mens du viser teksten i dit program. udskriv "hej\n ny linje"; Næste spørgsmål - er der andre specielle tegn? Ja, det er de! Men bare rolig - kun nogle få. Tjek tabellen nedenfor
Konstruere | Description |
---|---|
\n | ny linje |
\r | afkast |
\t | fanen |
\f | formfoder |
\b | backspace |
\a | klokke |
\e | undslippe |
\ 007 | enhver oktal ASCII-værdi (her, 007 = klokke) |
\x7f | enhver hex-værdi (her, 7f = slet) |
\\ | backslash |
\ ” | dobbelt citat |
\l | næste bogstav med små bogstaver |
\L | alle følgende bogstaver med små bogstaver indtil \E |
\u | stort næste bogstav |
\U | alle følgende bogstaver med store bogstaver indtil \E |
\E | Afslut \L, \U |
Jeg ved godt, der er ikke 'bare nogle få'... Men tro mig, du skal bare vide det
Strings Variable
Det er den samme operation, som vi ser i taltildeling. Perl henter vores streng fra højre side af lighedstegnet og sætter denne streng til en variabel.
Perl-eksempler:
$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;
Output:
vejledning315
Som du kan se, kan du sætte tal og strenge i de samme variable. Der er ingen klasse af variabler.
Strengsammenkædning (punktum):
Sammenkædningsoperatøren "." forener to eller flere strenge. Huske! Hvis strengen indeholder anførselstegn, vognretur, omvendt skråstreg, skal alle disse specialtegn escapes med en omvendt skråstreg.
Eksempler på Perl ' ' variabel:
#!/usr/bin/perl $a = "Tom is"; $b = "favorite cat"; $c = $a ." mother's ". $b; print $c;
Output:
Tom er mors yndlingskat
Strengene
"$a", "$b", er sammenkædet og gemt i "$c" ved hjælp af "." operatør.
Til sidst…
Konvertering mellem Numbers og strenge:
Som du ved, konverterer Perl automatisk mellem tal til streng efter behov. Hvordan ved Perl, hvad vi har brug for lige nu? Dette er enkelt - alt afhænger af operatoren (vi taler om operatorer senere, nu, accepter bare at der er mange operatorer, forskellige for tal og strenge) Hvis en operator forventer et tal, vil Perl bruge værdien som et tal . Hvis en operatør forventer en streng, vil Perl bruge værdien som en streng. Med andre ord - du behøver ikke bekymre dig om denne form for konvertering. Kort eksempel og alt skal være klart:
Perl-eksempler:
$string = "43"; $number = 28; $result = $string + $number; print $result;
Output:
71
værdien af $string konverteres til et heltal og lægges til værdien af $number.
Resultatet af tilføjelsen, 71, tildeles $result.
Omfang af en variabel – Adgangsmodifikatorer
Vi kan erklære en skalar i hvor som helst i programmet. Men du skal angive en adgangsmodifikator
Der er 3 typer modifikatorer
- my
- lokale
- vores
Mit: Ved at bruge dette kan du erklære enhver variabel, som er specifik i blokken. dvs inden for de krøllede seler.
#!/usr/bin/perl my $var=5; if(1) { my $var_2 =$var; } print $var_2;
Ingen output
Resultatet af programmet bliver ingenting!
I ovenstående eksempel vil du se, at der er to variabler erklæret, den ene er inde i if-blokken ($var_2) og den anden er uden for If-blokken ($var). Variablen, som er erklæret uden for blokken, vil være tilgængelig for if-blokken, men den variabel, der blev erklæret inde i if-blokken, vil ikke være tilgængelig for det ydre program.
Lokal: Ved at bruge dette kan vi faktisk maskere de samme variabelværdier til forskellige værdier uden faktisk at ændre den oprindelige værdi af variablen, antag at vi har en variabel $a, for hvilken værdien er tildelt 5, kan du faktisk ændre værdien af den variabel ved at generklære den samme variabel ved hjælp af lokale nøgleord uden at ændre den oprindelige værdi af variablen, som er 5. Lad os se, hvordan dette virker med et eksempel.
#!/usr/bin/perl $var = 5; { local $var = 3; print "local,\$var = $var \n"; } print "global,\$var = $var \n";
Outputtet af ovenstående program vil være på denne måde.
lokal, $var = 3
global, $var = 5
På denne måde kan vi ændre værdien af variablen uden at påvirke den oprindelige værdi.
Vores: Når en variabel er erklæret med adgangsmodifikator "vores", kan den bruges på tværs af hele pakken. Antag, at du har Perl-modul eller en pakke test.pm, som har en variabel erklæret med vores omfang. Denne variabel kan tilgås i alle scripts, der vil bruge den pågældende pakke.
Hvis du er seriøs omkring programmering i Perl, bør du begynde dit program med
#!/usr/local/bin/perl
brug streng;
Dette vil hjælpe dig med at skrive bedre og renere kode. 'brug streng' aktiverer streng pragma, som får dig til at erklære dine variabler med mit søgeord.
Dette er en god programmeringspraksis
#!/usr/local/bin/perl use strict; $var = 10; print "$var";
Resultat: Fejl
#!/usr/local/bin/perl use strict; my $var = 10; print "$var";
Output:
10
Perl Array
Hvad er Perl Array?
Et array er en speciel type variabel, som gemmer data i form af en liste; hvert element kan tilgås ved hjælp af indeksnummeret, som vil være unikt for hvert element. Du kan gemme tal, strenge, flydende værdier osv. i dit array. Det ser godt ud, så hvordan opretter vi et array i Perl? I Perl kan du definere en matrix ved at bruge '@'-tegn efterfulgt af det navn, du vil give. Lad os overveje at definere et array i Perl.
mit @array;
Sådan definerer vi et array i Perl; du tænker måske, hvordan vi skal gemme data i den. Der er forskellige måder at gemme data på i et array. Dette afhænger af, hvordan du vil bruge det.
my @array=(a,b,c,d); print @array;
Output:
abcd
Dette er et array med 4 elementer i det.
Array-indekset starter fra 0 og slutter til dets maksimale deklarerede størrelse, i dette tilfælde er den maksimale indeksstørrelse 3.
Du kan også erklære et array på ovenstående måde; den eneste forskel er, at den gemmer data i et array, der betragter et hvidt mellemrum for at være afgrænsningen. Her betyder qw() citatord. Betydningen af denne funktion er at generere en liste med ord. Du kan bruge qw på flere måder til at erklære et array.
@array1=qw/a b c d/; @array2= qw' p q r s'; @array3=qw { v x y z}; print @array1; print @array2; print @array3;
Output:
abcdpqrsvxyz
Antag, at du vil tildele en værdi til 5th element i et array, hvordan skal vi gøre det.
$array [4] ='e';
Sekventiel array
Sekventielle arrays er dem, hvor du gemmer data sekventielt. Antag, at du vil gemme 1-10 tal eller alfabeter az i et array. I stedet for at skrive alle bogstaverne, kan du prøve noget som nedenfor –
@numbers= (1..10); print @numbers; #Prints numbers from 1 to 10;
Output:
12345678910
Perl Array Størrelse
Vi har et array, som allerede er tilgængeligt, og du ved ikke, hvad størrelsen af det array er, så hvad er den mulige måde at finde det på.
@array= qw/a b c d e/; print $size=scalar (@array);
Kan vi få størrelsen på et array uden at bruge funktioner? Ja vi kan.
@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
Output:
5
5
Dynamisk array
Ovenstående metode til at erklære et array kaldes statiske arrays, hvor du kender størrelsen af et array.
Hvad er Dynamic Array?
Dynamiske arrays er dem, du erklærer uden at angive nogen værdi på dem. Så præcis hvornår gemmer vi værdier i det array? Enkelt, vi opbevarer dem i løbet af køretiden. Her er et simpelt program til det.
Vi vil bruge nogle indbyggede Perl-funktioner til at udføre denne opgave.
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. }
Output:
Dette er
slags dyn
mic
rr
y
Opdelingsfunktionen opdeler strengens indhold i et array baseret på det afgrænsede tegn, der leveres til den. Denne funktion vil også fjerne afgrænsningstegnet fra strengen, i dette tilfælde er det 'a';
Push, Pop, shift, unshift for Perl-arrays:
Disse funktioner kan bruges i Perl til at tilføje/slette til array-elementer.
- Perl Push: tilføjer array-element i slutningen af et eksisterende array.
- Perl Pop: fjerner det sidste element fra et array.
- Perl Shift: fjerner det første element fra et array.
- Perl Unshift: tilføjer et element i begyndelsen af et array.
Lad os se et eksempel, hvor vi kan bruge nedenstående funktioner.
@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";
Output:
1.: Man Tir Ons
2. ved tryk : Man Tir Ons Tors
3. ved udskiftning: Fre Man Tir Ons Tors
4. når pop : Fre Man Tir Ons
5. ved skift : Man Tir Ons
Perl Hashes
Hvorfor har vi brug for Hash?
Vi har allerede lært om skalarer og arrays i tidligere afsnit.
Hvad præcist gør skalarer? Den gemmer kun heltal og strenge.
Hvad gør arrays helt præcist? Det er en samling af skalarer, hvor du får adgang til hvert element i et array ved hjælp af indekser. Men er det en god idé at bruge et array, når du har hundreder og tusinder af poster? Vi glemmer hvilket indeks der har hvilken værdi. For at overvinde denne situation har vi noget som perl-hash.
Hvad er hashes?
En hash kan også indeholde så mange skalarer, som arrayet kan rumme. Den eneste forskel er, at vi ikke har noget indeks, men vi har nøgler og værdier. En hash kan erklæres, startende med % efterfulgt af navnet på hashen. Lad os se et eksempel på, hvordan vi kan definere en Perl-hash, og hvordan vi kan skelne denne fra array
Overvej et eksempel på tre personer, og deres aldre er repræsenteret i et array.
@array=('Sainath',23,'Krishna',24,'Shruthi',25); #This is how an array looks. print @array;
Output:
Sainath 33Krishna24Shruthi25
På denne måde er det svært at kende individuelle aldre, da vi skal huske både indeksplaceringer af navn og alder på alle personer. Det kan være enkelt, når du har 3 navne, men når du har 1000 eller flere? Du kender svaret.
Dette kan vi overvinde ved hjælp af en hash.
Hash-eksempel:
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.
Output:
Sainath 33Krishna24Shruthi25Sainath33Krishna24Shruthi25
Vi har nu erklæret en hash, fantastisk!! Men hvordan får vi adgang til eller udskriver det? Hvert element i hash skal tilgås med dets tilhørende nøgle, som der vil være tildelt en værdi for. Så der er en en-en mapping mellem hver af nøglerne og værdien i hashen.
For at udskrive en persons alder skal du blot huske navnet på den pågældende person.
print $hash{'Krishna'}; # This how we should access a hash. Key enclosed within {}.
Du har måske undret dig over, hvorfor jeg brugte $hash{KeyName}, husk at en hash igen er en samling af skalarer. Så vi kan bruge $, som repræsenterer skalar til at få adgang til hvert hash-element.
Bemærk: Hver nøgle i hash skal være unik, ellers vil den tilsidesætte din værdi, som blev tildelt tidligere.
Hvordan kan vi tildele en hash til en anden hash? Enkel, på samme måde som vi gør for
Vi kan også printe hele hash.
%hash=( 'Tom' => 23); %newHash=%hash; # Assigning hash to a new hashprint %newHash; print %newHash;
Output:
Tom23
Tilføj Perl Hashes
Som du kan se, har vi allerede en hash %newHash, og nu skal vi tilføje flere poster i den.
$newHash{'Jim'}=25; $newHash{'John'}=26; $newHash{'Harry'}=27; print %newHash;
Output:
Jim25John26Harry27
Perl Delete-tast
Du ønsker måske at slette en post fra en hash. Sådan kan vi gøre det.
delete $newHash{'Jim'};#This will delete an entry from the hash.
Slet er en indbygget funktion i Perl. Her vil vi se et eksempel på at tildele en hash til et array.
@array=%newHash; print "@array";
Bemærk: Hver gang du udskriver en hash, eller når du gemmer hash i et array. Rækkefølgen kan altid afvige. Det er ikke altid det samme.
Vi kan kun tildele nøgler eller værdier af en hash til en matrix.
@arraykeys= keys(%newHash); @arrayvalues=values(%newHash); print "@arraykeys\n"; print "@arrayvalues\n"; # \n to print new line.
For at fjerne alle poster i hashen, kan vi direkte tildele hashen til null.
%newHash=();# Dette vil omdefinere hashen uden indtastninger.
Perl betingede erklæringer
Vi kan bruge betingede erklæringer i Perl. Så hvad er betingede udsagn? Betingede erklæringer er dem, hvor du faktisk tjekker, om nogle omstændigheder er opfyldt i din kode.
Tænk på et eksempel, du køber nogle frugter, og du kan ikke lide, at prisen er mere end 100 dollars. Så reglen her er 100 dollars.
Perl understøtter to typer betingede udsagn; de er hvis og medmindre.
Perl If
Hvis kodeblok vil blive udført, når betingelsen er sand.
my $a=5; if($a==5) { print "The value is $a"; }
Output:
5
Perl hvis andet
Det ser godt ud. Lad os tænke på en situation, hvor $a ikke er 5.
my $a=10; if($a==5) { print "The values is $a ---PASS"; } else { print "The value is $a ---FAIL"; }
Output:
Værdien er 10 — FAIL
På denne måde kan vi kun kontrollere én tilstand ad gangen. Er det en begrænsning? Nej, du kan også kontrollere forskellige forhold ved at bruge if… elsif … else.
Perl Else If
my $a=5; if($a==6) { print "Executed If block -- The value is $a"; } elsif($a==5) { print "Executed elsif block --The value is $a"; } else { print "Executed else block – The value is $a"; }
Output:
Udført elsif-blok – Værdien er 5
I ovenstående tilfælde vil elsif-blokken blive udført, da $a er lig med 5.
Der kan være situationer, hvor både if- og elsif-kodeblokke mislykkes. I dette scenarie vil den anden kodeblok blive udført. Du kan faktisk eliminere else code check, hvis du ikke kan lide at inkludere.
Perl Nested If
I dette tilfælde kan du bruge if-kodeblok i en mere if-kodeblok.
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"; }
Output:
Inde i 1. anden blok – Værdien er 11
Udfør den samme kode ved at ændre værdien af $a; du kan finde ud af resten.
Perl Medmindre
Du har allerede en idé om, hvad hvis gør (hvis betingelsen er sand, vil den udføre kodeblokken). Medmindre er modsat if, medmindre kodeblok vil blive udført, hvis betingelsen er falsk.
my $a=5; unless($a==5) { print "Inside the unless block --- The value is $a"; } else { print "Inside else block--- The value is $a"; }
Output:
Inde i 1. anden blok – Værdien er 5
Gæt hvad der vil være output. Du har ret!!!!!. Outputtet vil være udskriftserklæringen for else-blokken. På grund af betingelsen i, medmindre kodeblok er sand, skal du huske, medmindre blokering kun udføres, hvis betingelsen er falsk. Skift værdien af $a og udfør koden, så vil du se forskellen.
Perl Brug af if
$a= " This is Perl"; if($a eq "SASSDSS"){ print "Inside If Block"; } else { print "Inside else block" }
Output:
Inde i anden blok
Bruger medmindre
$a= " This is Perl"; unless($a eq "SASSDSS"){ print "Inside unless Block"; } else { print "Inside else block" }
Output:
Inde, medmindre Block
Perl Loops – Kontrolstrukturer
Perl understøtter kontrolstrukturer svarende til andre programmeringssprog. Perl understøtter fire typer kontrolstrukturer for, foreach, while og indtil. Vi bruger disse udsagn til gentagne gange at udføre noget kode.
Til sløjfe Perl
For kodeblok vil udføres, indtil betingelsen er opfyldt. Lad os tage et eksempel på, hvordan man Perl looper et array.
my @array=(1..10); for(my $count=0;$count<10;$count++) { print "The array index $count value is $array[$count]"; print "\n"; }
Output:
Værdien af matrixindeks 0 er 1
Værdien af matrixindeks 1 er 2
Værdien af matrixindeks 2 er 3
Værdien af matrixindeks 3 er 4
Værdien af matrixindeks 4 er 5
Værdien af matrixindeks 5 er 6
Værdien af matrixindeks 6 er 7
Værdien af matrixindeks 7 er 8
Værdien af matrixindeks 8 er 9
Værdien af matrixindeks 9 er 10
Her, i for () udtryk, er der mange udsagn inkluderet. Der er en betydning for hver af dem.
for (initialisering; betingelse; stigning)
Her er en anden måde at bruge til.
for(1..10) { print "$_ n"; print "\n"; }
Output:
1n
2n
3n
4n
5n
6n
7n
8n
9n
10n
Perl Foreach
For hver udsagn kan bruges på samme måde som for; Den største forskel er, at vi ikke har nogen tilstandskontrol og stigning i dette.
Lad os tage det samme eksempel med foreach perl.
my @array=(1..10); foreach my $value (@array) { print " The value is $value\n"; }
Output:
Værdien er 1
Værdien er 2
Værdien er 3
Værdien er 4
Værdien er 5
Værdien er 6
Værdien er 7
Værdien er 8
Værdien er 9
Værdien er 10
Foreach tager hvert element i et array og tildeler denne værdi til $var for hver iteration. Vi kan også bruge $_ til det samme.
my @array=(1..10); foreach(@array) { print " The value is $_ \n"; # This is same as the above code. }
Output:
Værdien er 1
Værdien er 2
Værdien er 3
Værdien er 4
Værdien er 5
Værdien er 6
Værdien er 7
Værdien er 8
Værdien er 9
Værdien er 10
Dette ser godt ud til at få adgang til arrays. Hvad med hashes, hvordan kan vi få hashnøgler og værdier ved hjælp af foreach?
Vi kan bruge foreach til at få adgang til nøgler og værdier af hashen ved at sløjfe den.
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $key (keys %hash) { print "$key \n"; }
Output:
Mickey
Tom
Jerry
Du undrer dig måske, hvorfor vi brugte Keys i foreach(). Keys er en indbygget funktion i Perl, hvor vi hurtigt kan få adgang til nøglerne til hashen. Hvad med værdier? Vi kan bruge værdier funktion til at få adgang til værdier af hashen.
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"; }
Output:
værdien er 24
værdien er 23
værdien er 25
Perl Mens
Perl While-løkken er en kontrolstruktur, hvor kodeblokken vil blive eksekveret, indtil betingelsen er sand.
Kodeblokken afsluttes kun, hvis betingelsen er falsk.
Lad os tage et eksempel for Perl While loop.
Her er et problem, som vil kræve input fra brugeren og ikke afsluttes før nummeret angivet som '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"
Output:
Gæt et tal mellem 1 og 10
9
Gæt et tal mellem 1 og 10
5
Gæt et tal mellem 1 og 10
7
Du gættede lykketallet 7
I ovenstående eksempel vil while-betingelsen ikke være sand, hvis vi indtaster andet input end '7'.
Hvis du ser, hvordan while virker her, vil kodeblokken kun udføres, hvis betingelsen om et stykke tid er sand.
Perl gør-mens
Do while-løkken udføres mindst én gang, selvom betingelsen i while-sektionen er falsk.
Lad os tage det samme eksempel ved at bruge gør mens.
$guru99 = 10; do { print "$guru99 \n"; $guru99--; } while ($guru99 >= 1); print "Now value is less than 1";
Output:
10
9
8
7
6
5
4
3
2
1
Nu er værdien mindre end 1
Perl indtil
Indtil kodeblok ligner medmindre i en betinget erklæring. Her vil kodeblokken kun udføres, hvis betingelsen i indtil blok er falsk.
Lad os tage det samme eksempel, som vi brugte i tilfælde af et stykke tid.
Her er et problem, som vil kræve input fra brugeren og ikke afsluttes, før navnet angivet som andet end 'sai'.
print "Enter any name \n"; my $name=<STDIN>; chomp($name); until($name ne 'sai') { print "Enter any name \n"; $name=<STDIN>; chomp($name); }
Output:
Indtast et hvilket som helst navn sai
Perl gør-indtil:
Gør indtil kan kun bruges, når vi har brug for, at en betingelse er falsk, og den skal udføres mindst én gang.
print "Enter any name \n"; my $name=<STDIN>; chomp($name); do { print "Enter any name \n"; $name=<STDIN>; chomp($name); }until($name ne 'sai');
Output:
Indtast et hvilket som helst navn Howard
Indtast et hvilket som helst navn Sheldon
Indtast et hvilket som helst navn sai
Udfør mens, gør-mens, indtil og gør-indtil eksempelkoder for at se forskellen.
Perl OperaTor
Hvad er Operator?
Operatorer på computersprog angiver en handling, der kan udføres på et sæt af variabler eller værdier, som computeren kan forstå. Perl har inkorporeret det meste Operators fra C sprog. Perl har mange operatører sammenlignet med andre programmeringssprog. Operators er kategoriseret som aritmetiske, logiske, relationelle og tildelingsoperatorer.
Aritmetik Operators:
Aritmetiske operatorer er dem, der kan bruges til at udføre nogle grundlæggende matematiske operationer. Disse aritmetiske operatorer er binære operatorer, hvor vi har brug for to argumenter for at udføre en grundlæggende operation. Vi kan også bruge unære operatorer til andre grundlæggende operationer; du kan se forskellen i eksemplerne nedenfor.
OperaTor | Description | Eksempel |
---|---|---|
+ |
Tilføjelsesoperation bruges til at tilføje to værdier eller variabler holde værdier |
$x=5+6; # eller $y=6; $z=$x+$y; |
- |
Subtraktionsoperator bruges til at trække to værdier eller variabler med værdier fra |
$x=6-5; # eller $y=6; $z=$x-$y; |
* |
Multiplikationsoperator bruges til at multiplicere to værdier eller variabler med værdier |
$x=6*5; # eller $y=6; $z=$x*$y; |
/ |
Divisionsoperator bruges til at dividere to værdier eller variabler med værdier |
$x=36/6; # eller $y=6; $z=$x/$y; |
** |
Den eksponentielle operator, der bruges til at give eksponent og få værdien. Eks: 22 = 43 = 27 |
$x=5**5; # eller $x=4; $y=2; $z=$x**$y; |
% |
Modulus-operator bruges til at få påmindelsen under opdeling af to værdier eller variabler med værdier |
$x=5%2; # eller $x=10; $y=2; $z=$x % $y; |
++ |
Unær additionsoperator for at øge værdien af en variabel med 1 |
$x=5; $x++; Or ++$x; |
— |
Unær subtraktionsoperator for at reducere værdien af en variabel med 1 |
$x=5; $x–; # post dekrement Or –$x;# før dekrement |
Eksempel for at fuldføre alle ovenstående operationer.
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");
Output:
Tilføjelse af 10 og 2 er 12
Sub af 10 og 2 er 8
Mul af 10 og 2 er 20
Div på 10 og 2 er 5
Exp på 10 og 2 er 100
Mod på 10 og 2 er 0
Opgave Operators:
Tildelingsoperatorer tildeler simpelthen værdier til variabler, men der er en ting mere, som vi skal huske her, tildelingsoperatorer vil også udføre aritmetiske operationer og tildele den nye værdi til den samme variabel, som operationen udføres på.
OperaTor | Description | Eksempel |
---|---|---|
+= |
Tilføjelsesoperator bruges til at tilføje og tildele værdien til samme variabel |
$x=4; $x+=10; |
-= |
Subtraktionsoperator bruges til at trække fra og tildele værdien til samme variabel |
$x=4; $x-=10; |
*= |
Multiplikationsoperator bruges til at tilføje og tildele værdien til samme variabel |
$x=4; $x*=10; |
/= |
Divisionsoperator bruges til at dividere og tildele værdien til samme variabel |
$x=4; $x/=10; |
** = |
Eksponentiel operator bruges til at få eksponent og tildele værdien til samme variabel |
$x=4; $x**=10; |
%= |
Modulus operator bruges til at få en påmindelse under division og tildele værdien til den samme variabel |
$x=10; $x%=4; |
Eksempel for at fuldføre alle ovenstående operationer.
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");
Output:
Tilføj = 15
Sub= 10
Mul = 50
Div = 10
Logisk og relationel Operators:
Perl bruger logiske operatorer til at sammenligne tal og strenge. Det meste af tiden bruges logiske operatorer i betingede erklæringer.
OperaTor | Description |
---|---|
==eller lign |
Operator bruges til at kontrollere, om begge variabler er ens |
!=Eller nej |
Operator bruges til at kontrollere, om begge variabler ikke er ens |
> eller gt |
Operator bruges til at kontrollere om A er større end B |
<or lt |
Operator bruges til at kontrollere om A er mindre end B |
>=eller ge |
Operator bruges til at kontrollere om A er større end eller lig med B |
<=eller le |
Operator bruges til at kontrollere om A er mindre end eller lig med B |
|| eller eller |
Operator bruges til at kontrollere, at enten A eller B holder værdi |
&&eller og |
Operator bruges til at kontrollere både A og B holder værdi |
Lad os tage et eksempel, hvor vi kan forklare alle scenarierne.
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"); }
Output:
Sandt - lig 5 og 5
Sandt - ikke lig med 6 og 7
Sandt - 7 større end 6
Sandt - 6 mindre end 7
Sandt - 6 mindre end 7
Sandt - 7 større end 6
Du kan se eksempler på logiske operatorer i senere afsnit.
Perl Specialvariabler
Hvad er Perl Special Variables?
Særlige variabler i Perl er dem, der har en foruddefineret betydning. Disse variabler er angivet med enten rigtige navn eller tegnsætningssymboler. Vi har en speciel variabel for alle Perl-understøttede variabler som skalære specialvariabler, Array specialvariabler, hash specialvariabler. De fleste af de specielle variabler, vi bruger, er af skalarer.
Når vi vil bruge den specielle variabel med dens navn, så er vi nødt til at indlæse et Perl-modul 'brug engelsk', for eksplicit at sige Perl-fortolker, at vi vil bruge specielle variabler ved at bruge dens navn.
Skalære specielle variabler
Variabel | Description |
---|---|
$_$ARG |
Dette er standardvariablen, som gemmer de aktuelle værdier. |
$0 eller $PROGRAM_NAME |
Gemmer filnavnet på Perl-scriptet. |
$/ |
Indtastningsrecordseparatoren, denne har en standardværdi på '\n', som er nylinjetegn |
$. |
Indeholder det aktuelle linjenummer på den fil, der læses |
$, |
Outputfeltseparator, denne bruges hovedsageligt af print()-sætningen. Som standard er værdien af denne sat til 0, vi kan ændre værdien af denne variabel. |
$\ |
Output record separator, værdien af denne variabel vil være tom; vi kan tildele en hvilken som helst værdi til dette, som vil blive brugt af print()-sætningen, mens outputtet udskrives. |
$# |
Denne variabel bruges til outputformat under udskrivning af tal. |
$%$FORMAT_PAGE_NUMBER |
Beholder det aktuelle sidenummer for den læste fil. |
$=$FORMAT_LINES_PER_PAGE |
Vil holde den aktuelle sidelængde af filen læst. |
$-$FORMAT_LINES_LEFT |
Indeholder værdien af det antal linjer, der er tilbage at udskrive fra siden. |
$~$FORMAT_NAME |
Formatnavn: Indeholder formatet for det aktuelt valgte output som standard filhåndtagsnavnet. |
$^$FORMAT_TOP_NAME |
Indeholder værdien af overskriftsformatet for filbehandleren, som standard vil værdien være _TOP efterfulgt af filhåndtagsnavn. |
$|$OUTPUT_AUTOFLUSH |
Standard er nul; dette bruges til at tømme outputbufferen efter hver write() eller print(). |
$$ |
Vil holde det kørende procesnummer for Perl-tolk. |
$? |
Statuskode : Rør- og systemkald. Returstatus for den udførte kommando. |
$&$MATCH |
Brugt i regulære udtryk vil dette indeholde en streng af det sidste vellykkede mønstermatch. |
$`$ FORKAMP |
Brugt i regulære udtryk, vil dette indeholde streng, der er gået forud for sidste vellykkede mønstermatch. |
$'$POSTMATCH |
Brugt i regulære udtryk, vil dette indeholde en streng, efterfulgt af den sidste vellykkede mønstermatch. |
$+$LAST_PAREN_MATCH |
Indeholder strengen i den sidste parentes, der matches af den sidste mønstersøgning. |
$ |
$1, $2, $3 …. Holder værdierne af mønsteret matchet i rækkefølge. |
$[ |
Første indeks: Array, en understreng. |
$] |
En version af Perl. |
$” |
Separatoren, der bruges til listeelementer, er som standard et mellemrum. |
$; |
Subscript-separator brugt i flerdimensionelle arrays |
$! |
I numerisk sammenhæng udskriver fejlnummeret. Udskriv fejlen i strengkontekst. |
$@ |
Vil indeholde syntaksfejlinformationen, der bruges når eval() bruges. |
$< |
Indeholder det rigtige UID (bruger-id) for processen, der kører scriptet. |
$> |
Indeholder den effektive UID for processen, der kører scriptet. |
$( |
Indeholder det rigtige GID (gruppe-id) for processen, der kører scriptet. |
$) |
Indeholder den effektive GID for processen, der kører scriptet. |
$^D$DEBUGGING |
Indeholder den aktuelle værdi af fejlfindingsflagene. |
$^C |
Holder den aktuelle værdi af flaget, når -c kommandolinjeomskifter bruges. |
$^F |
Maksimal systemfilbeskrivelse, som standardværdi, er sat til 2 |
$^I$INPLACE_EDIT |
Indeholder værdien af –i kommandolinjekontakt. |
$^M |
Speciel hukommelsespulje kan bruges, når Perl-script dør med en out-off hukommelsesfejl. |
$^O$OSNAME |
Operating systeminformation er gemt. 'Linux' til Linux-systemer, 'mswin32' til Windows systemer. |
$^T$ BASETIME |
Tiden, hvor scripts kører i sekunder. |
$^W$ADVARSEL |
Den aktuelle værdi af kommandolinjekontakten –w. Advarselskontakt. |
$ARGV |
Navn på den aktuelle fil, når <> bruges. |
Array specielle variabler:
Variabel | Description |
---|---|
@INC |
Indeholder en liste over stier, hvor Perl biblioteksmoduler eller scripts kan ses i, mens det aktuelle script udføres. Denne @INC bruges ved brug og kræver sætninger for at se på disse stier til biblioteksmoduler. |
@ARGV |
Gemmer de beståede kommandolinjeargumenter. |
@_ |
Anvendes i underrutiner, mens parametrene overføres til underrutinerne. |
@F |
Dette er det array, som inputlinjerne er lagret i, når autoopdeling -a (kommandolinjeomskifter bruges). |
Hash særlige variabler:
Variabel | Description |
---|---|
%INC |
Filnavnet vil være nøglerne; værdier vil være stien til disse filer. Brugt af gør, brug og kræve. |
%ENV |
System miljøvariabler. |
%SIG |
Signals handler. |
Perl regulært udtryk
Hvad er regulært udtryk?
Perl regulære udtryk er stærkt nok til at matche strengmønstrene i et udsagn eller en gruppe af udsagn. Regulære udtryk bruges mest i tekstparsing, mønstermatchning og meget mere baseret på kravet. Vi har visse operatorer, som er specielt brugt til regulært udtryksmønsterbinding =~ og !~, Disse er test- og tildelingsoperatorer.
Regulært udtryk Operatorer
- Perl Match — m//
- Perl erstatning – s///
- Perl Transliterate – tr///
Før vi går videre, skal vi vide nogle få ting om regulært udtryk; der er visse ting som Meta-karakterer, jokertegn i Perl Regex-syntaks.
Char | Betydning |
---|---|
\ |
Special eller tilbud |
* |
Match 0 eller flere tegn |
+ |
Match 1 eller flere tegn |
? |
Match 0 eller 1 tegn |
| |
Kan bruges til at matche alternative mønstre |
() |
Bruges til at opbevare det matchede mønster |
[] |
Sæt af tegn kan passeres. Bruges specifikt til numeriske og alfabeter. |
{} |
Bruges til at angive det antal gange, kampen kan udføres. |
^ |
Start af strengen |
$ |
Slut på streng |
\w |
Bruges til at matche et enkelt tegn eller ord, som kan være alfanumerisk inklusive "_" |
\W |
Match alt andet end alfanumerisk |
\s |
Bruges til at matche mellemrum |
\S |
Match alt andet end mellemrum |
\d |
Match numre. Ikke decimalværdier og negative værdier |
\D |
Match alt andet end tal. |
\t |
Match faneplads |
\n |
Match newline |
Ovenstående er det sæt af tegn, som kan bruges under mønstermatching.
Lad os se nogle få eksempler.
Overvej en situation, hvor brugeren giver noget input under scriptudførelsen, og vi ønsker at kontrollere, om brugeren har indtastet et eller andet navn som input eller ej. Vi skal skrive en regulær udtrykssyntaks for at udtrække dit navn og udskrive det samme.
my $userinput="Guru99 Rocks"; if($userinput=~m/.*(Guru99).*/) { print "Found Pattern"; } else { print "unable to find the pattern"; }
Output:
Fundet mønster
Her har vi skrevet det regulære udtryk som /.*(Guru99).*/.* matcher alle tegn i en streng. Et '.' i perl regex match refererer til ethvert tegn inklusive mellemrum.
Lad os se præcis, hvordan vi kan konstruere et Regex.
Overvej et eksempel på en streng med flere ord og cifre og specielle symboler som dette "Hej alle sammen, dette er mit nummer: +91-99298373639";
Regex: /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i
Ord mellemrum ord mellemrum ord mellemrum ord mellemrum ord mellemrum ord mellemrum specialtegn : mellemrum specialtegn+cifre specialtegn –cifre.
Perl Match Operatorer
Match-operatorerne bruges til at matche en streng i en sætning eller i en variabel.
my $var="Hello this is perl"; if($var=~m/perl/) { print "true"; } else { print "False"; }
Output:
sand
Denne lille kode vil udskrive 'sand', da perl-mønstermatchningen identificerer strengen i en variabel. Grundlæggende søger Perl efter teksten i // i hele strengen, selvom den finder ét sted, vil den returnere 'sand'. Mønsteret kan være hvor som helst i variablen. Vi kan prøve at erstatte =~ med !~ for at se forskellen mellem disse to operatorer.
Perl udskiftning OperaTor
Denne operator kan bruges til at søge og erstatte et hvilket som helst tegn med enten null eller et andet tegn.
my $a="Hello how are you"; $a=~s/hello/cello/gi; print $a;
Output:
cello hvordan har du det
Bemærk: Vi kan faktisk også bruge enhver mønstermatchende streng, som vi gjorde tidligere i denne substitutionsoperator. Her brugte vi 'gi', g-globalt, i-ignore case.
Perl Oversættelse OperaTor
Dette ligner Substitution, men det bruger ingen perl regulære udtryk, snarere kan vi direkte videregive værdien eller et ord, som vi ønsker at erstatte.
my $a="Hello how are you"; $a=~tr/hello/cello/; print $a;
Output:
Hej ko er du
Perl fil I/O
Perl er designet til at manipulere filer og I/O-operationer effektivt. Perl største fordel er i filparsing og håndtering af filerne. Der er mange indbyggede funktioner og operatører, der bruges under filhåndtering i Perl.
Grundlæggende udføres filhandlinger, der udføres med Perl, ved hjælp af FILEHANDLE. Vi er nødt til at definere dette FILEHANDLE under åbningen af en fil til enten at læse eller skrive.
I denne Perl script tutorial lærer du-
Perl Åbn fil
Vi kan åbne en fil ved hjælp af funktionen open() tilgængelig i Perl.
open(FILEHANDLE, "filename or complete path of the file");
Nu har vi åbnet en fil, nu opstår et spørgsmål. Er det til at læse eller skrive?
Perl Læs fil & Perl Skriv fil
Perl har visse tilstande, som skal bruges til at læse, skrive eller tilføje en fil.
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");
Et par eksempler på læsning af en fil:
Overvej, at vi har en perl-fil med navnet file.txt og har få linjer tekst i den. Vi skal åbne denne fil og udskrive den samme.
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;
Dette vil udskrive filindholdet på outputskærmen.
Nu vil vi skrive et program til at oprette og skrive data til en perl-fil.
open(FH,">test.txt"); my $var=<>; print FH $var; close FH;
Dette vil skrive input tilvejebragt under kørslen og opretter en fil test.txt, som vil have input.
Ovenstående måde vil altid forsøge at oprette en fil med navnet test.txt og skrive input til filen; vi skriver det samme for at tilføje filen.
open(FH,">>test.txt"); my $var=<>; print FH $var; close FH;
Modes | Description |
---|---|
< |
Læs |
+< |
Læser og skriver |
> |
Opretter, skriver og afkorter |
+> |
Læs, skriv, skab og afkort |
>> |
Skriver, tilføjer og skaber |
+>> |
Læs, skriv, tilføjer og opret |
Nu hvor vi skal se, hvordan man læser, skriver og tilføjer filer ved hjælp af grundlæggende eksempler.
Vi vil se få flere eksempler og andre funktioner, som hjælper med at forstå mere om filer.
Perl Fortæl
Denne metode vil returnere den aktuelle position for FILEHANDLER i bytes, hvis den er angivet, ellers vil den betragte den sidste linje som positionen.
open(FH, "test.pl"); while(<FH>) { $a=tell FH; print "$a"; }
Perl Søg
Søgefunktionen ligner fseek-systemkaldet. Denne metode bruges til at placere filmarkøren til en bestemt placering ved at angive bytes efterfulgt af enten starten af filmarkøren eller slutningen af filmarkøren.
seek FH, bytes, WHENCE;
HVORNÅR er positionen for filmarkøren til at starte. Nul indstiller det fra begyndelsen af filen.
Eksempel: Lad input.txt have nogle data som "Hej, det er min verden."
open FH, '+<','input.txt'; seek FH, 5, 0; # This will start reading data after 5 bytes. $/ = undef; $out = <FH>; print $out; close FH;
Output:
det her er min verden
Perl Fjern link
Unlink bruges til at slette filen.
unlink("filename or complete file path");
Håndtering af mapper:
Vi kan også håndtere mapper, hvorigennem vi kan håndtere flere filer.
lad os se, hvordan man åbner en mappe. Vi kan bruge opendir og readdir metoderne.
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);
Dette vil udskrive alle de tilgængelige filer i den mappe.
Perl-filtest og deres betydning
-r |
For at kontrollere, om fil/mappe kan læses af den aktuelle bruger/gruppe |
-w |
For at kontrollere, om fil/mappe kan skrives af den aktuelle bruger/gruppe |
-x |
For at kontrollere, om fil/mappe kan eksekveres af den aktuelle bruger/gruppe |
-o |
For at kontrollere, om fil/mappe ejes af den aktuelle bruger |
-R |
For at kontrollere, om fil/mappe kan læses af denne rigtige bruger/gruppe |
-W |
For at kontrollere om fil/mappe kan skrives af denne rigtige bruger/gruppe |
-X |
For at kontrollere om fil/mappe kan eksekveres af denne rigtige bruger/gruppe |
-O |
For at kontrollere, om fil/mappe ejes af denne rigtige bruger |
-e |
For at kontrollere, om fil/mappenavn findes |
-z |
For at kontrollere, om filen eksisterer og har nul størrelse (altid falsk for mapper) |
-f |
For at kontrollere, om Entry er en almindelig fil |
-d |
For at kontrollere, om Entry er en mappe |
-l |
For at kontrollere, om Entry er et symbolsk link |
-S |
For at kontrollere, om Entry er en socket |
-p |
For at kontrollere, om Entry er et navngivet rør (en "FIFO") |
-b |
For at kontrollere, om Entry er en blok specialfil (som en monteringsbar disk) |
-c |
For at kontrollere, om Entry er en specialfil med tegn (som en I/O-enhed) |
-u |
For at kontrollere, om fil eller mappe er setuid |
-g |
For at kontrollere, om fil eller mappe er setgid |
-k |
For at kontrollere, om filen eller mappen har den sticky bit indstillet |
-t |
Det givne filhåndtag er en TTY (som ved isatty() systemfunktionen kan filnavne ikke testes af denne test) |
-T |
For at kontrollere, om filen ligner en "tekst"-fil |
-B |
For at kontrollere, om filen ligner en "binær" fil |
-M |
For at kontrollere ændringsalderen (målt i dage) af filen |
-A |
For at kontrollere adgangsalderen (målt i dage) af filen |
-C |
For at kontrollere Inode-modifikationsalderen (målt i dage) af filen |
Perl subrutine
Hvad er subrutine?
Subrutiner ligner funktioner i andre programmeringssprog. Vi har allerede brugt nogle indbyggede funktioner som print, chomp, chop osv. Vi kan skrive vores egne underrutiner i Perl. Disse underrutiner kan skrives hvor som helst i programmet; det er at foretrække at placere underrutinerne enten i begyndelsen eller i slutningen af koden.
Eksempel på subrutiner
sub subroutine_name { Statements…; # this is how typical subroutines look like. }
Nu hvor vi ved, hvordan man skriver en underrutine, hvordan får vi adgang til den?
Vi skal have adgang til eller kalde en subrutine ved at bruge subrutinenavnet foran med '&'-symbolet.
sub display { print "this is a subroutine"; } display(); # This is how we call a subroutine
Sender Perl-parametre og Perl-argumenter
Subrutiner eller perl-funktion er skrevet for at placere den genanvendelige kode i den. Det meste af den genbrugelige kode kræver, at parametre sendes til subrutinen. Her vil vi lære, hvordan vi kan videregive argumenter til subrutinen.
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.
Output:
3 er den passerede værdi
@_ er en speciel array-variabel, som gemmer de argumenter, der sendes til underrutinerne.
Perl Shift
Vi kan også bruge 'shift' nøgleord, som flytter en parameter ad gangen til en variabel eller $_[0],$_[1]... som er et individuelt element i @_ array
sub display { my $var=shift; print "$var is passed"; } display("hello");
Output:
hej er bestået
Subrutiner bruges typisk i objektorienteret programmering og også på steder, hvor du kan have mere genanvendelig kode, der skal placeres.
Hovedfunktionaliteten af underrutiner er at udføre en opgave og returnere resultatet af den genbrugelige kode.
Vi kan returnere en værdi fra subrutine ved hjælp af nøgleordet return.
sub add { my $a=shift; my $b=shift; return($a+$b); } my $result=add(5,6); print $result;
Output:
11
$result vil indeholde værdien af de tilføjede $a og $b.
Vi kan også sende hashes og array direkte til subrutinen.
sub hash { my %hash=@_; print %hash; } %value= ( 1=>'a', 2=>'b'); &hash(%value);
Output:
1a2b
Vi kan også returnere en hash eller et array.
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;
Output:
Inde i Sub-rutine2b1aEfter Sub-rutine call2b1a
Perl-format
Perl har en mekanisme, som vi kan bruge til at generere rapporter. Ved at bruge denne funktion kan vi lave rapporter præcis som vi ønsker, mens vi udskriver på outputskærmen eller i en fil. Et simpelt format kan skrives ved hjælp af printf- eller sprintf-funktioner, der er tilgængelige i Perl.
printf "%05d\n", 30;
Dette vil inkludere foranstillede nuller foran nummer 30, hvilket gør en total optælling af cifre til 5. Det samme kan bruges til sprintf.
sprintf "%05d\n", 30; # This will print the same as printf.
Ved at bruge printf og sprintf kan vi få de fleste Perl-formater. Ved indberetninger vil det være vanskeligt at gennemføre.
================================================== =========================
Navn Adresse Alder Telefon
================================================== =========================
Krishna Chennai 24 929309242
Shruthi Chennai 24 929309232
Ovenstående er et eksempel på rapporter, som vi skal udskrive på samme måde i Perl. Dette kan opnås ved at bruge perl printf og perl sprintf. Det kan effektivt implementeres ved hjælp af format.
Et format kan erklæres på nedenstående måde.
format FORMATNAME=FORMATLIST.
Her vil vi bruge en bestemt metode, skrive til at udskrive dataene på outputskærmen eller i filen.
Symbol | Description |
---|---|
@ |
Bruges til at repræsentere starten af markholderen |
> |
Højrejustering af tekst |
< |
Venstrejustering af tekst |
| |
Center justering |
# |
Numerisk, hvis der er angivet flere #. Antager som en kommentar, hvis enkelt # er angivet |
. |
Decimaltegnet |
^ |
Start af feltholder kan også bruges til multiline og også til word-wrap |
~ |
Linjen skal være tom, hvis variablen er tom |
@* |
Flere linjer. |
($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 .
Udfør koden for at se outputtet.
Vi bruger symbolet @ til at angive starten på feltholderen eller strengen, '<' hvert tegn.
Vi bruger STDOUT til at udskrive på standardoutput. Vi kan ændre dette til filhåndtering, som vi bruger til at skrive data ind i filen.
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
Vi kan erstatte '<' til '>' eller '|' for at ændre justeringen af teksten. STDOUT_TOP bruges til at designe formatets header. Vi kan også bruge det samme med filbehandler ved hjælp af FH_TOP( FH er filbehandleren). Dette vil udlæse formatet til den fil, som vi arbejder med på.
Perl kodningsstandarder
Hver programmør vil have sin egen sans for at skrive koden ved hjælp af bestemte standarder; disse standarder bør være velkendte nok til, at andre programmører kan forstå og understøtte koden korrekt.
At skrive kode er enkelt og nemt. Problemet opstår, når det skal vedligeholdes på senere stadier. Korrekte retningslinjer og kodningsstandarder skal følges, mens koden skrives. Perl definerer også visse standarder, som vil være nyttige for programmører til at skrive kode. Det er tilrådeligt at indlæse 'streng' og 'advarselsmodul', mens du skriver koden. Hvert af disse moduler har sin egen betydning. Strict vil få os til at erklære variablen før brug og vil også fortælle, om der er et blottet ord i din kode. Advarselsmodulet kan alternativt bruges ved at sende '-w'-muligheden til Perl-fortolkeren i shebang. Advarsler udskrives på outputskærmen.
#!/usr/bin/perl –w
Nedenfor er nogle få lister over standarder.
- Brug modulet 'streng' og 'advarsler'.
- Fjern variabel, som ikke er i brug.
- Variablenavne skal være forståelige for andre brugere. Eks: $navn, @filData osv.
- Dokumentation er påkrævet under kodning af et script.
- Undlad at hardkode nogen værdier, prøv hellere at hente dem dynamisk eller bed brugeren om at indtaste under runtime.(Filsti, Filnavne).
- Maksimer genbrug af kode. Prøv at sætte den genbrugelige kode i underrutiner.
- Det betyder, at fulde navne skal angives for underrutiner.
- Underrutiner skal skrives med passende kommentarer og dokumentation.
- Initialiser altid variabler.
- Tjek altid returkoderne for systemopkald. Åbning af en fil kan ske eller ikke, at have en returkode her vil vise fejlstatus, hvis filen ikke eksisterer.
Eks: åben(FH,
- Subrutine skal altid returnere en værdi.
- Åbn krøllet i samme linje.
- Enkelt linje BLOCK kan placeres i en enkelt linje med krøllet.
- Brug etiketter under LOOPSEN, det ville være nemt at forlade løkken, når det er nødvendigt.
- Brug understregning, mens lange sætninger af ord skrives som et variabelnavn eller underrutine.
- Prøv at bruge simpelt regex, mens du koder.
Perfekt eksempel med kodningsstandarder:
####################################################################### Program to read the file content # Date: 22-2-2013 # Author : Guru99 ######################################################################## #!/usr/bin/perl use strict; use warnings; my $line; open FR, "file.txt" || die("Cannot open the file $!"); while ($line=<FR>) { print $line; } # Looping file handler to print data
Perl fejlhåndtering
Hvad er en undtagelse?
En undtagelse er en hændelse, der opstår under programafviklingen, og som vil suspendere eller afslutte dit program.
Fejlhåndtering
Fejlhåndtering er en, som enhver programmør skal passe på under programmeringen. Perl tilbyder også fejlhåndteringsteknikker, hvormed vi kan fange fejlen og håndtere dem i overensstemmelse hermed.
Der er mange måder at kontrollere for fejl i programmet. Vi skal undersøge returkoderne for den funktion, som vi bruger kode. Hvis vi er i stand til at håndtere disse returkoder korrekt, så kan det meste af fejlhåndteringen opnås.
Hvad vil returnere i tilfælde af systemopkald?
I tilfælde af systemkald vil returneringsstatus blive gemt i to specielle variabler $? Og $!
$! – Dette vil fange fejlnummeret eller fejlnummeret forbundet med fejlmeddelelsen.
$? – Dette vil indeholde return status system() funktionen.
Brug af Perl-operator eller Logical
Vi kan bruge logisk eller operatør til fejlhåndtering under brug af systemopkald.
ex:
open(FH,"<test.txt");
Dette vil åbne filen i læsetilstand, hvis filen eksisterer.
Hvad hvis filen mangler?
open(FH,"<test.txt") or die("File not exists $!"); # This will perl exit the program if the file not exists. open(FH,"<test.txt") or warn ("File not exists $!"); # This will print a warning message on STDERR
Perl Eval
Eval-funktionen kan håndtere fatale fejl, kompileringstidsfejl, runtime-fejl og de fejl, der afslutter din kode på et tidspunkt.
Perl Eval funktion kan have en kodeblok eller et udtryk. Evals betragter alt, der er placeret i den, som en streng.
Overvej en situation med at kalde en underrutine, som ikke er defineret i scriptet. I denne situation afsluttes scriptet og angiver "udefineret underrutine &XYZ, denne fejl kan håndteres i eval-funktionen.
Der er mange anvendelser af evals blok; en sådan brug er, når vi ønsker at indlæse modulet, som er specifikt for operativsystemet under kørsel.
Eks: Divider med nul forårsager en fatal fejl; for at håndtere dette kan vi placere koden i evals blok.
$a=5; $b=0; eval { '$result=$a/$b'; } if($@) { print "$@"; # All the error codes returned by evals will get stored in $@. }
Output:
syntaksfejl ved C:\Users\XYZ\Text.pl linje 8, nær “)
{“
Udførelse af C:\Users\XYZ\Text.pl afbrudt på grund af kompileringsfejl.
Eksempel: eval ved hjælp af perl die-sætning.
sub test { die "Dieing in sub test \n"; } eval { test(); }; print "Caught : $@\n";
Output:
Fanget: Døende i deltest
Brug af Perl Try
Perl understøtter ikke try, catch og endelig kodeblokke som andre programmeringssprog. Vi kan stadig bruge dem ved at indlæse et eksternt Perl-modul.
brug Prøv::Tiny;
Ved at bruge dette kan vi placere din kode i prøveblok og fange fejlen i advarselsblok.
I stedet for $@ brugt i eval Prøv::Tiny bruger $_.
# håndtere fejl med en catch-handler
try { die "Die now"; } catch { warn "caught error: $_"; # not $@ };
Bruger endelig.
my $y; try { die 'foo' } finally { $y = 'bar' }; try { die 'Die now' } catch { warn "Returned from die: $_" } finally { $y = 'gone' };
Output:
foo på C:\Users\XYZ\Text.pl linje 4.
Vi kan bruge try, catch og endelig på denne måde.
prøv { # statement }
catch {# statement }
endelig { # statement };
Or
try { # statement } finally { # statement };
Output:
Or
try { # statement } finally { # statement } catch { # statement };
Output:
Perl Socket programmering
Hvad er en stikkontakt?
Socket er et medium, hvorigennem to computere kan interagere på et netværk ved at bruge netværksadresse og porte.
Antag, at A (Server) og B (Client) er to systemer, som skal interagere med hinanden ved hjælp af Sockets til at køre nogle programmer.
For at implementere dette skal vi oprette sockets i både A (Server) og B (Client), A vil være i modtagetilstand og B vil være i afsendertilstand.
A (server):
Her ønsker serveren at modtage en forbindelse fra B (Client) og udføre nogle opgaver og sende resultatet tilbage til B (Client). Når vi udfører koden, forsøger operativsystemet i A at skabe en socket og binder en port til den socket. Så vil den lytte fra afsenderen, som er B.
B (klient).
Her ønsker klienten at sende et eller andet program fra sit system til A (Server) for en vis behandling. Når vi udfører koden, forsøger operativsystemet i B at skabe en socket til at kommunikere med A (Server), B skal angive IP-adressen og portnummeret på A, som B ønsker at forbinde til.
Hvis dette går godt, vil begge systemer interagere for at udveksle oplysningerne gennem én port. Perl understøtter også socket-programmering.
Perl har en indbygget API, hvorigennem sockets kan implementeres. For at gøre det nemt, er der mange CPAN-moduler, som vi bruger til at skrive socket-programmer.
Serverdrift:
- Opret stikkontakt
- Indbindingsstik med adresse og port
- Lyt til stikket på den portadresse
- Accepter klientforbindelserne, som forsøger at oprette forbindelse ved hjælp af serverens port og IP
- Udfør operationer
Klient Operationer:
- Opret stikkontakt
- Opret forbindelse til server ved hjælp af dens portadresse
- Udfør operationer
socket.io
Dette er et modul til socket-programmering, som er baseret på objektorienteret programmering. Dette modul understøtter ikke INET-netværkstypen, der bruges i netværk.
IO::Socket::INET:
Dette modul understøtter INET-domæne og er bygget på IO::Sockets. Alle de tilgængelige metoder i IO::Sockets nedarves i INET-modulet.
Klient og server ved hjælp af TCP-protokol:
TCP er en forbindelsesorienteret protokol; vi vil bruge denne protokol til socket-programmering.
Før vi går videre, lad os se, hvordan vi kan oprette et objekt til IO::Socket::INET-modulet og oprette en 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";
Den nye metode i IO::Socket::INET-modulet accepterer en hash som inputparameter til subrutinen. Denne hash er foruddefineret, og vi skal blot give værdierne til de nøgler, som vi vil bruge. Der er en liste over nøgler, der bruges af denne hash.
PeerAddr |
Fjernværtsadresse |
PeerHost |
Synonym for PeerAddr |
PeerPort |
Fjernport eller tjeneste |
LocalAddr |
Lokal værtsbindingsadresse |
localhost |
Synonym for LocalAddr |
LocalPort |
Lokal værtsbindingsport |
Proto |
Protokolnavn (eller nummer) |
Type |
Socket typen |
Lyt |
Køstørrelse for at lytte |
GenbrugAddr |
Indstil SO_REUSEADDR før binding |
Genbruge |
Indstil SO_REUSEADDR før binding |
Genbrugsport |
Indstil SO_REUSEPORT før binding |
Broadcast |
Indstil SO_BROADCAST før binding |
Timeout |
Timeoutværdi for forskellige operationer |
MultiHomed |
Prøv alle adresser for multihomed-værter |
Blokering |
Bestem, om forbindelsen vil være blokeringstilstand |
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);
Bemærk:
I socket-programmering bliver vi nødt til at udføre Server.pl først og derefter client.pl individuelt i forskellige kommandoprompter, hvis vi kører på lokal vært.
Hvad er Perl-moduler og -pakker
Moduler og pakker er tæt forbundet med hinanden og er uafhængige. Pakke: En Perl-pakke er også kendt som navneområde, og som har alle unikke variabler brugt som hashes, arrays, skalarer og underrutiner. Modul: Modul er en samling genanvendelig kode, hvor vi skriver subrutiner i den. Disse moduler kan indlæses i Perl-programmer for at gøre brug af underrutinerne skrevet i disse moduler.
Hvad er Perl-moduler?
Standardmoduler vil blive installeret under installationen af Perl på ethvert system. CPAN: Omfattende Perl Archive Network – Et globalt lager af Perl-moduler. Vores egne tilpassede Perl-moduler, som kan skrives af os. Grundlæggende vil et modul, når det indlæses i et hvilket som helst script, eksportere alle dets globale variabler og underrutiner. Disse underrutiner kan ringe direkte, som om de var deklareret i selve scriptet. Perl-moduler kan skrives med filtypen .pm til filnavnet Ex : Foo.pm. Et modul kan skrives ved at bruge 'pakke Foo' i starten af programmet.
Grundlæggende Perl-modul:
#!/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;
Ingen output
For at bruge dette Perl-modul er vi nødt til at placere det i den aktuelle mappe.
Vi kan indlæse et Perl-modul ved at bruge require eller bruge hvor som helst i koden. Den største forskel mellem kræve og brug er, kræve indlæst modul under runtime og brug belastninger under kompileringstiden.
#!/usr/bin/perl require Arithmetic; print Arithmetic::add(5,6); print Arithmetic:: subtract (5,6);
Her, i ovenstående eksempel, får vi adgang til underrutinerne ved hjælp af fuldt kvalificeret modulnavn.
Vi kan også få adgang til pakken ved at bruge 'brug Arithmetic'.
Eksportør:
Dette modul har en standardfunktionalitet for importeringsmetoder.
#!/usr/bin/perl package Arithmetic; require Exporter; @ISA= qw(Exporter); # This is basically for implementing inheritance. @EXPORT = qw(add); @EXPORT_OK = qw(subtract); sub add { my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
@EXPORT-array kan bruges til at sende en liste over variabler og underrutiner, som som standard vil blive eksporteret til modulet, der ringer.
@EXPORT_OK array kan bruges til at videregive en liste over variabler og underrutiner, som vil blive eksporteret efter behov, hvor brugeren skal specificere under indlæsning af modulet.
#!/usr/bin/perl use Arithmetic qw(subtract); print add(5,6); print subtract (5,6);
Som standard vil tilføje subrutine blive eksporteret. Subtractmetoden eksporteres ikke, hvis den ikke er angivet under indlæsning af modulet.
Objektorienteret programmering i Perl
I dette afsnit lærer vi, hvordan du opretter Perl-objektorienterede moduler. Lad os først se, hvad objektet er? Et objekt er en instans, hvor vi kan få adgang til, ændre og lokalisere nogle data i ethvert Perl-modul. Dette er intet andet end at få din eksisterende Perl-pakke, variabler og subrutiner til at fungere som klasse, objekter og metoder i forhold til andre programmeringssprog.
Opret klasse
Vi ved allerede, hvordan man opretter moduler fra det forrige emne. Formålet med klassen er at gemme metoder og variabler. Et Perl-modul vil have underrutiner, som er metoder. Vi skal have adgang til disse variabler og subrutineobjekter.
Perl konstruktør
En konstruktør i Perl er en metode, som vil udføre og returnere os en reference med modulnavnet tagget til referencen. Dette kaldes som velsignelse af klassen. Vi bruger en bestemt variabel til at velsigne en perl-klasse, som er velsigne.
#!/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;
Den nye metode, der bruges som konstruktør for en klasse, Denne konstruktør vil skabe et objekt for os og vil vende tilbage til scriptet, som kalder denne konstruktør.
#!/usr/bin/perl use Arithmetic; my $obj= Arithmetic->new(); my $result= $obj->add(5,6); print "$result"; $result = $obj->subtract(6,5); print "$result";
Her skal vi forstå, hvordan objektet er skabt. Hver gang vi forsøger at oprette et objekt til klassen, skal vi bruge klassens fulde navn. Antag, hvis perl-klassen er placeret i nogle lib\Math\Arithmetic.pm. Og hvis vi ønsker at få adgang til denne perl-klasse fra lib-mappen, skal vi angive hele stien til klassen, mens vi kalder scriptet ind.
brug lib::Matematik::Aritmetik;
my $obj = lib::Math::Arithmetic->new();
Sådan foregår objektskabelsen i Perl.
@INC:
Hvordan ved Perl-scriptet, hvor biblioteksmodulet findes? Perl kender kun til den aktuelle mappe for scriptet og Perl's indbyggede bibliotekssti. Når vi bruger et Perl-modul, som ikke er placeret i den aktuelle mappe eller Perl-bibliotekssti, vil scriptet altid fejle. Om @INC, dette er et array, som rummer alle mappestier, hvor det skal lede efter Perl-modulerne. Prøv at udføre denne kommando og se, hvad der bliver outputtet.
perl –e "print @INC"
Dette vil give noget output, og det er stien, hvor lib-modulerne vil være tilgængelige. Når vi bruger et nyt biblioteksmodul, er vi nødt til at bede Perl, tolk, om at se nærmere på det særlige sted, hvor Perl-modulet er tilgængeligt.
push(@INC, "PATH TO YOUR MODULE");
Gør dette som din første linje kode. Dette vil bede din tolk om at se nærmere på den vej. eller brug
lib Arithmetic; # List here is your Perl Module location
Perl Destructor
Destruktoren af et objekt kaldes som standard i slutningen og før dit script afsluttes. Dette bruges til at ødelægge dine objekter fra hukommelsen.
PERL V/s Shell Scripting
- Programmering i Perl forårsager ikke portabilitetsproblemer, hvilket er almindeligt, når man bruger forskellige skaller i shell-scripting.
- Fejlhåndtering er meget let i Perl
- Du kan nemt skrive lange og komplekse programmer på Perl på grund af dens enorme omfang. Dette er i modsætning til Shell, der ikke understøtter navnerum, moduler, objekt, arv osv.
- Shell har færre genanvendelige biblioteker til rådighed. Intet sammenlignet med Perls CPAN
- Shell er mindre sikker. Det kalder eksterne funktioner (kommandoer som mv, cp osv. afhænger af den anvendte shell). Tværtimod udfører Perl nyttigt arbejde, mens han bruger interne funktioner.
Hvordan PERL bruges i automationstestning
Perl er meget udbredt inden for automatisering. Det er måske ikke de bedste programmeringssprog i verden, men det er bedst egnet til visse typer opgaver. Lad os diskutere, hvor og hvorfor Perl bruges til Test af automatisering.
Opbevaringstest
Hvad er opbevaring? Data gemt i filer.
Antag, at vi har en lagerrelateret Test sag hvor vi skal skrive data på én partition, læse det & verificere at dataene er skrevet korrekt.
Dette kan gøres manuelt, men kan en manuel tester udføre det samme 10000 gange? Det bliver et mareridt! Vi har brug for automatisering
Bedste værktøj til at automatisere alt relateret til opbevaring er Perl på grund af dets filhåndteringsteknikker, REGEX og kraftfuld filparsing, som bruger mindst eksekveringstid sammenlignet med andre programmeringssprog.
Hvorfor skal vi teste opbevaring? Tænk på store datacentre, hvor data vil flyde kontinuerligt fra et system til et andet system med 1000-vis af registreringer, der bliver gemt i sekundet. Det er vigtigt at teste robustheden af en sådan lagermekanisme.
Mange virksomheder som HP, Dell, IBM og mange serverproducenter bruger Perl som en grænseflade til at teste funktionalitet i Storage og Networking domæner. NetApp er et sådant firma, der fuldstændig arbejder på Storage og bruger Perl som programmeringssprog til at automatisere testcases.
Hvis du er interesseret i Perl Automation, vil det være tilrådeligt at lære om Storage & Networking Concepts.
Server- og netværkstest:
PERL er meget udbredt til serveroppetid og overvågning af ydeevne.
Overvej et datacenter, som har 100 værter (servere). Du skal oprette forbindelse til hver vært, udføre nogle kommandoer eksternt. Du vil også genstarte systemet og tjekke, hvornår det kommer online igen.
At udføre denne opgave manuelt for alle 100 værter vil være et mareridt. Men vi kan nemt automatisere dette ved hjælp af PERL
Design trin for at opnå denne ovenstående automatisering ved hjælp af PERL
- Tag input fra filen om værtsoplysninger som (IP, brugernavn og adgangskode).
- Brug Net::SSH2 til at oprette forbindelse til hvert system og etablere en kanal til at udføre kommandoerne.
- Udfør sæt af nødvendige kommandoer, f.eks.: ls, dir, ifconfig,ps osv.
- Genstart systemet.
- Vent i 10 minutter, indtil systemet kommer op.
- Ping systemet ved hjælp af Net::Ping-modulet og udskriv status.
Vi vil kode ovenstående scenarie.
Lad os tage en fil kaldet Input.txt, som gemmer den komplette information om alle de værter, hvor vi skal forbinde og udføre kommandoen.
Input.txt
192.168.1.2 root-adgangskode
192.168.1.3 root-adgangskode
192.168.1.4 root root123
HostCheck.pl
use Net::SSH2; use Net::Ping; use strict; use warnings; my $ping = Net::Ping->new(); # Creating object for Net::Ping my $SSHObj = Net::SSH2->new(); #Creating object for Net::SSH2 open( FH, "Input.txt" ); # Opening file and placing content to FH my @hosts = <FH>; my $ip; my @ips; foreach (@hosts) { if ( $_ =~ /(.*)\s+(\w+)\s+(.*)/ ) #Regex to get each info from file { $ip = $1; my $user = $2; my $password = $3; $SSHObj->connect($ip); print "Connecting to host -- $ip --Uname:$user --Password:$password\n"; my $status = $SSHObj->auth_password( $user, $password ); print "$status\n"; die("unable to establish connection to -- $ip") unless ($status); my $shell = $SSHObj->channel(); print "$_\n" while <$shell>; $shell->blocking(1); $shell->pty('tty'); $shell->shell(); sleep(5); #Executing the list of command on particular host. Can be any command print $shell "ls \n"; print "$_\n" while <$shell>; print $shell "ps \n"; print "$_\n" while <$shell>; print $shell "dir \n"; print "$_\n" while <$shell>; print $shell "init 6\n"; #rebooting the system push( @ips, $ip ); } } sleep 600; foreach (@ips) { if ( $ping->ping($_) ) { print "$_ is alive.\n" if $ping->ping($_); } else { print "$_ is not still up --waiting for it to come up\n"; } }
Web test
Perl er ikke kun begrænset til lager- og netværkstest. Vi kan også udføre webbaseret test ved hjælp af PERL. WWW-Mekanisér er ét modul brugt til webtest. Dybest set vil den ikke starte nogen browser for at teste funktionaliteten af webapplikationer, snarere bruger den kildekoden til HTML-siderne.
Vi kan også udføre browserbaseret test vha Selenium IDE, RC, web-driver. Perl er understøttet for Selenium.
\n"; #dette vil holde den resterende streng, efter at patter-match er færdig.
Print "