Perl-veiledning: Variable, Array, Hashes med programmeringseksempel
Hva er Perl?
Perl er et generelt tolket, dynamisk programmeringsspråk på høyt nivå. Perl er et begrep som står for "Practical Extraction and Reporting Language", selv om det ikke er noe akronym for Perl. Det ble introdusert av Larry Wall i 1987. Perl-språket ble spesialdesignet for tekstredigering. Men nå er det mye brukt til en rekke formål, inkludert Linux-systemadministrasjon, nettverksprogrammering, webutvikling, etc.
La oss si det på en enkel måte. Mens datamaskiner bare forstår 0-er og 1-er (binært språk/maskinspråk/ [språk på lavt nivå]), er det veldig vanskelig å programmere på et binært språk for oss mennesker. Perl er et programmeringsspråk som bruker naturlige språkelementer, ord som brukes i vanlig engelsk språk og er derfor lettere å forstå av mennesker [språk på høyt nivå]. Nå er det et problem; datamaskiner kan ikke forstå høynivåspråk, som vi mennesker lett kan forstå. Til det trenger vi noe som kan oversette høynivåspråket til lavnivåspråket. Her kommer tolk til vår hjelp. Tolken er et stykke programvare som konverterer programmet skrevet på høynivåspråket til lavnivåspråket slik at datamaskinen forstår og utfører instruksjonene som er skrevet i programmet. Derfor er Perl en tolket programmeringsspråk.
Hvor brukes Perl?
Kraften til Perl skriptspråk kan implementeres på mange felt. Den mest populære bruken av Perl er i webutvikling., Perl brukes også til å automatisere mange oppgaver på webservere, og andre administrasjonsjobber, den kan automatisk generere e-poster og rydde opp i systemer. Perl brukes fortsatt til sitt opprinnelige formål, dvs. å trekke ut data og generere rapporter. Den kan produsere rapporter om ressursbruk og se etter sikkerhetsproblemer i et nettverk. På grunn av denne grunn har Perl blitt et populært språk som brukes i webutvikling, nettverk og bioinformatikk også. Bortsett fra alt kan denne perlen også brukes til CGI-programmering.
Perl kan også brukes til å lage bilder og manipulere. Bortsett fra at nettverk via telnet, FTP, etc., er oppretting av grafisk brukergrensesnitt, VLSI-elektronikk og å lage e-postfiltre for å redusere spamming-praksis noen brukstilfeller av Perl.
Perl er også kjent for implementering av OOP (objektorientert programmering) praksis og støtter alle former for arv (enkel, multiple og diamant), polymorfisme og innkapsling. Perl er fleksibel nok til å støtte både prosedyre- og OOP-praksis samtidig. Perl har også ekstra moduler som lar deg skrive eller bruke/gjenbruke kode skrevet inn Python, PHP, PDL, TCL, Octave, Java, C, C++, Basic, Ruby og Lua i Perl-manuset ditt. Dette betyr at du kan kombinere Perl med disse ekstra programmerings språk snarere omskriver eksisterende kode.
Hvorfor bruke Perl?
Det er sant at det er andre programmeringsspråk som kan brukes til å gjøre alt som er nevnt ovenfor, hvorfor skal du da spesifikt bruke Perl? Perl er veldig lett å lære, spesielt hvis du har bakgrunn i dataprogrammering. Perl ble designet for å være enkelt for mennesker å skrive og forstå i stedet for å gjøre det enkelt å behandle på datamaskiner. Den bruker regulære uttrykk. Dens naturlige språkstil er forskjellig fra andre programmeringsspråk som bruker spesifikk grammatikk og syntakser; Derfor er Perl veldig fleksibel og pålegger deg ikke noen spesiell måte å tenke ut en løsning eller et problem på. Perl er ekstremt bærbar. Det kan kjøres på et hvilket som helst operativsystem som har Perl-tolk installert, så det er plattformuavhengig. Alt av Linux Operating Systems kommer installert med Perl, slik at du kan starte Perl-koding i Linux rett ut av esken. Dette er i motsetning til Shell-skript, der koden endres med smaken av Linux-distribusjon som brukes, noe som gjør den mindre og mindre bærbar Små spesifikke oppgaver i Perl blir veldig enkle og raske. Gjennom denne Perl-opplæringen for nybegynnere vil du lære hvordan du kan kode små, raske programmer for spesifikke oppgaver. La oss ta et enkelt eksempel på det klassiske Hello World-programmet som brukes til å begynne å lære et hvilket som helst programmeringsspråk som har UNIX som røtter:
Eksempel: Perl hei verden
#!/usr/bin/perl print "Hello, world!";
Utgang:
Hei Verden!
De to ovennevnte kodelinjene vil skrive ut Hei, verden! Nå var det ikke for enkelt og raskt? Studenter med kunnskap om C, C++ vil vite at det krever mange flere kodelinjer for å få samme utdata på disse språkene.
Du lurer kanskje på hvorfor Perl er så kjent på nettet. Det er enkelt ettersom det meste som skjer på nettet er av TEXT og Perl er veldig god på tekstbehandling. Hvis vi sammenligner Perl med noen av språkene, vil Perl være det beste språket som er bra i filhåndtering, tekstbehandling og utdatarapportering
En av de beste fordelene med Perl er at det er det gratis å bruke
Perl-fellesskapet er overbevist om at programvare bør være fritt tilgjengelig, fritt modifiserbar og fritt distribuerbar. Flere frivillige fra Perl-samfunnet streber etter å gjøre programmeringsspråket så godt som mulig.
Fordeler og ulemper med Perl
Pros: | Cons: |
---|---|
|
|
La oss komme i gang
Med nok kunnskap om historien til Perl og grunnleggende begreper innen dataprogrammering som kreves for koding i Perl, er det på tide at vi tar dykket og kommer i gang med Perl. Det neste kapittelet vil lære deg hvordan du kan sette opp Perl på systemet ditt og gjøre deg klar for kodingsreisen i Perl. Denne Perl-skriptopplæringen tar Linux som operativsystemet som studentene skal bruke for koding i Perl.
Last ned og installer Perl – Windows, Mac og Linux
Hvordan få tak i Perl?
Gode nyheter du har det sannsynligvis!
Men hvis du ikke finner det allerede på systemet ditt, kan du fortsatt få det gratis.
For å finne ut om du allerede har Perl installert, gå inn på kommandolinjen og skriv inn: perl -v
Kommandoen viser versjonen av Perl hvis den er installert. I dette tilfellet er versjonen v5.14.2. Men hvis ikke ... ikke få panikk ...
Unix | Allerede installert Leveres forhåndsinstallert med Perl, men du må kanskje oppdatere til siste versjon. |
Mac OS | Allerede installert OSX kommer med Perl forhåndsinstallert, selv om du kanskje må oppdatere den til siste versjon |
Windows | Trenger å installere To alternativer er tilgjengelige
|
Oppdaterer Perl på Linux:
Hvis du trenger å oppdatere Perl-versjonen, skriv bare inn én enkelt kommandolinje
sudo apt-get install perl
og slappe av. Resten vil bli tatt hånd om. Bare sørg for at du har en aktiv internettforbindelse.
Installer perl for Windows:
Først laster du ned Active Perl fra denne link. Følg disse trinnene for å installere ActivePerl på Windows system. Se skjermbildene nedenfor for det samme.
Trinn 1: Når du har lastet ned installasjonsprogrammet og starter installasjonen, vil du se vinduet nedenfor, klikk på Neste for å fortsette.
Trinn 2: Godta lisensavtalen for å fortsette installasjonen.
Trinn 3: Nedenfor er forskjellige pakker som vil bli installert. Som standard vil alle bli valgt. Det eneste som er annerledes er PPM (Perl Package Manager). Dette er verktøyet som tilbys av Active Perl for å installere eksterne Perl-moduler eller -biblioteker i systemet ditt. Klikk på Neste for å fortsette.
Trinn 4: Dette er forskjellige typer Perl-utvidelser som kan brukes til Perl. For det meste vil vi bruke .Pl, .Plx og .Pm for Perl. Perl-moduler bruker i utgangspunktet .Pm som filtype for å referere til en bibliotekfil. Velg alle alternativene og klikk på Neste-knappen.
Trinn 5: Klikk på Installer-knappen for å fortsette med installasjonen.
Trinn 6: Når den er installert, kjør kommandoen 'Perl –v' for å sjekke om Perl er vellykket installert i systemet ditt.
Det er mange ting som må diskuteres for å sette Perl-miljø i både Linux og Windows, siden det ikke vil være mange bibliotekfiler inkludert i denne installasjonen. Du må installere dem manuelt. Du kan installere disse manuelt ved å bruke CPAN (Comprehensive Perl Archive Network) eller PPM som bare fungerer for perl-vinduer. Men disse filene er ikke obligatoriske for å starte koding i Perl.
Bortsett fra dette Windows-oppsettet du kan bruke Windows 10s nye funksjon i Linux-undersystemet over Windows og bruk den til å kjø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";
Ikke bekymre deg hvis du ikke forstår denne teksten. Alt vil være klart snart. Kom igjen og ta en titt på det etter linje:
#!/usr/bin/perl
Dette forteller Operating System for å kjøre denne filen med programmet som ligger på /usr/bin/perl Noen IDE-er trenger ikke denne linjen. Hvis det er nødvendig, må du her skrive en vei til tolken din. Huske! Denne spesielle linjen må være i begynnelsen av programmet og må starte fra #! bruk advarsler; Dette er en annen spesiell kommando som forteller tolken å vise alle advarsler, dvs. -w som aktiverer advarsler globalt.
print "Hello World";
Utskriftsinstruksjonen skriver tekst til skjermen. Semikolonet på slutten av linjen forteller perl-tolken at instruksjonen er ferdig. Du må sette et semikolon på slutten av hver instruksjon i Perl-kode. Legg merke til anførselstegn(“). Det er nødvendig for utskriftsinstruksjoner. Lagre skriptet ovenfor som firstprog.pl
On Windows
Hvis du har Strawberry installert, kan du ganske enkelt klikke på Kjør. Du kan også kjøre kommandolinjegrensesnitt og skrive på konsollen:
C:\> perl path\firstprog.pl
eller, hvis perl.exe ikke er i veien:
C:\> c:\perl\bin\perl.exe firstprog.pl
På Linux/Unix
Du trenger bare å åpne terminalen og skrive:
perl firstprog.pl
Hvis du ikke kan kjøre programmet, sørg for at du er kvalifisert til å kjøre det. Skriv inn terminalen:
chmod +x firstprog.pl
Programmet ditt er nå kjørbart og klart til å kjøre. For å utføre, skriv:
./firstprog
Installer cpan minus-moduler
Moduler er sett med koder som brukes til å utføre oppgaver som utfører vanlige operasjoner i flere programmer. Hvis du bruker perl-moduler, trenger du ikke å skrive om kodene for å utføre den samme operasjonen. Perl kan benytte seg av slike eksterne biblioteker av koder. Et av de beste bibliotekene er CPAN. Det står for Comprehensive Perl Archive Network og inneholder en enorm mengde Perl-moduler du kan bruke. Det er et fellesskap eller nettverk av et stort antall utviklere som bidrar med slike moduler. Ved å installere støtte for CPAN-moduler i din perl-modul, kan du benytte deg av CPAN-modulene og gjøre arbeidet ditt enklere. De fleste Perl-moduler er skrevet i Perl, noen bruker XS (de er skrevet i C) så krever en C-kompilator (det er lett å få til dette oppsettet – ikke få panikk. Moduler kan ha avhengigheter av andre moduler (nesten alltid på CPAN) og kan ikke installeres uten dem (eller uten en spesifikk versjon av dem) Det er verdt å lese dokumentasjonen for alternativene nedenfor få, pakke ut, bygg og installer moduler fra CPAN for å gjøre det enklere å installere andre moduler (du vil takke oss for å installere). App-cpanminus perl-moduler, i kommandolinjetypen:
cpan App::cpanminus
cpan App::cpanminus Sørg for at du har internettforbindelse mens perl-moduler lastes ned og installeres.
Installer nå hvilken som helst modul:
cpan –i <Module_Name>.
La oss se et eksempel på installasjon av en modul File::Data(Det er et grensesnitt for å få tilgang til fildata).
Perl-variabel
Nå skal vi snakke om variabler. Du kan forestille deg en type container som inneholder en eller flere verdier. Når det er definert, forblir navnet på variabelen det samme, men verdien eller verdiene endres om og om igjen.
Det er 3 typer variabler:
De enkleste er skalarer, og dette er vårt tema i dag
Skalar variabel
Denne typen variabel har en enkelt verdi.
Navnet begynner med et dollartegn og en Perl-identifikator (det er navnet på variabelen vår).
Navnekonvensjon
Hvis du er kjent med andre programmeringsspråk, vil du vite at det er visse regler for navngivning av variabler. Tilsvarende har Perl tre regler for navngivning av skalarer.
- Alle skalarnavn vil begynne med en $. Det er enkelt å huske å prefiks hvert navn med $. Tenk på det som en $skalar.
- Som PHP. etter det første tegnet $, som er spesielt i Perl, er alfanumeriske tegn, dvs. a til z, A til Z og 0 til 9 tillatt. Understrekingstegn er også tillatt. Bruk understrek for å dele variabelnavnene i to ord. "Men det første tegnet kan ikke være et tall"
- Selv om tall kan være en del av navnet, kan de ikke komme umiddelbart etter $. Dette innebærer at det første tegnet etter $ enten vil være et alfabet eller understrek. De som kommer fra C/C++ bakgrunn bør umiddelbart kunne gjenkjenne likheten. Eksempler
Perl-eksempel:
$var; $Var32; $vaRRR43; $name_underscore_23;
Disse er imidlertid ikke lovlige skalarvariabelnavn.
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 regelen sier at når Perl bare har en av noe, er det en skalar. Skalarer kan leses fra enheter, og vi kan bruke det til programmene våre.
To typer skalardatatyper
- Numbers
- Strenger
Numbers:
I denne typen skalardata kan vi spesifisere:
- heltall, det er ganske enkelt hele tall, som 2, 0, 534
- flyttall, det er reelle tall, som 3.14, 6.74, 0.333
Merk: Generelt ser Perl-tolken heltall som flytende kommatall. For eksempel, hvis du skriver 2 i programmene dine, vil Perl se det som 2.0000
Heltalls bokstaver:
Den består av ett eller flere sifre, eventuelt innledet av et pluss eller minus og inneholder understrekinger.
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 noe spesielt. Men tro meg, dette er den vanligste typen skalarer. De er overalt.
Flytende komma bokstaver:
Den består av sifre, eventuelt minus, desimaltegn 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, heksadesimal og binær representasjon:
Det er et alternativ til desimalsystemet. Tillat meg å vise deg oktal, heksadesimal og binær representasjon. En kort tabell presenterer all viktig informasjon om denne rare stilen:
Representasjon | Base | Fortsatt av |
---|---|---|
Octal | 8 | 0 (null) |
Heksadesimal | 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 verdiene for Perl betyr det samme. Perl lagrer ikke verdiene i samme format. Den vil internt konvertere disse heksadesimale, binære, oktale til desimalverdier.
Oppgaven er den vanligste operasjonen på en skalar, og den er veldig enkel. Perl bruker for det likhetstegnet. Den tar en verdi av uttrykket fra høyre side og setter denne verdien til variabelen vår.
La oss ta en titt på eksempler:
$size=15; # give $size value of 15 $y = -7.78; # give $y value of -7.78
Dessuten kan du legge inn variabel ikke bare et tall, men også et uttrykk.
$z = 6 + 12 # give $z value of 18
Strenger
Strenger: Det er også en veldig enkel type skalar.
Maksimal lengde på en streng i Perl avhenger av hvor mye minne datamaskinen har. Det er ingen grense for størrelsen på strengen, alle tegn, symboler eller ord kan utgjøre strengene dine. Den korteste strengen har ingen tegn. Den lengste kan fylle hele systemminnet. Perl-programmer kan skrives helt i 7-bits ASCII-tegnsett. Perl lar deg også legge til et hvilket som helst 8-bits eller 16-bits tegnsett aka. ikke-ASCII-tegn i strengliteraler. Perl har også lagt til støtte for Unicode UTF-8.
I likhet med tall er det to forskjellige typer strenger:
- Enkelte anførselstegn streng
- Double sitater strenge bokstaver
Enkeltsiterte strenge bokstaver
Enkelte anførselstegn brukes til å omslutte data du ønsker skal tas bokstavelig. Et kort eksempel og alt skal være klart:
Perl-eksempler:
#!/usr/bin/perl $num = 7; $txt = 'it is $num'; print $txt;
Utgang:
det er $num
Her på grunn av enkle anførselstegn er verdien av $num ikke tatt og de bokstavelige tegnene '$','n', 'u' og 'm' lagt til verdien av $txt
Double-siterte strengbokstaver
Double Anførselstegn brukes til å omslutte data som må interpoleres før behandling. Det betyr at escapede tegn og variabler ikke bare bokstavelig talt settes inn i senere operasjoner, men blir evaluert på stedet. Escape-tegn kan brukes til å sette inn nye linjer, tabulatorer osv.
Perl-eksempler:
$num = 7; $txt = "it is $num"; print $txt;
Utgang:
det er 7
Her på grunn av doble anførselstegn er verdien av $num tatt lagt til verdien av $txt
Double-quotes interpolerer skalar- og matrisevariabler, men ikke hashes. På den annen side kan du bruke doble anførselstegn for å interpolere stykker av både arrays og hashes.
Mystisk \n
Tenk på følgende program
Perl-eksempler:
print "hello \n";
Utgang:
Hallo
Perl viser ikke bare 'hei\n', men bare 'hei'. Hvorfor? Fordi '\n' er et spesielt tegn og betyr at du vil gå til en ny linje mens du viser teksten i programmet ditt. skriv ut "hei\n ny linje"; Neste spørsmål - er det noen andre spesielle tegn? Ja, det er de! Men ikke bekymre deg - bare noen få. Sjekk tabellen nedenfor
Konstruer | Description |
---|---|
\n | ny linje |
\r | retur |
\t | tab |
\f | formfeed |
\b | backspace |
\a | bell |
\e | flykte |
\ 007 | enhver oktal ASCII-verdi (her, 007 = bjelle) |
\x7f | en hvilken som helst hex-verdi (her, 7f = slett) |
\\ | backslash |
\ ” | dobbelt anførselstegn |
\l | liten neste bokstav |
\L | alle følgende bokstaver små til \E |
\u | neste bokstav med stor bokstav |
\U | alle påfølgende bokstaver med store bokstaver til \E |
\E | Avslutt \L, \U |
Jeg vet, det er ikke "bare noen få"... Men tro meg, du må bare vite det
Strings Variable
Det er den samme operasjonen, som vi ser i talltildeling. Perl henter strengen vår fra høyre side av likhetstegnet og setter denne strengen 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;
Utgang:
opplæring315
Som du kan se, kan du sette tall og strenger i de samme variablene. Det er ingen klasse av variabler.
Strengesammenkobling (punktum):
Sammenkoblingsoperatøren "." forener to eller flere strenger. Huske! Hvis strengen inneholder anførselstegn, vognretur, omvendt skråstrek, må alle disse spesialtegn escapes med en omvendt skråstrek.
Eksempler på Perl ' ' variabel:
#!/usr/bin/perl $a = "Tom is"; $b = "favorite cat"; $c = $a ." mother's ". $b; print $c;
Utgang:
Tom er mors favorittkatt
Strengene
"$a", "$b", er sammenkoblet og lagret i "$c" ved hjelp av "." operatør.
Til slutt…
Konvertering mellom Numbers og strenger:
Som du vet, konverterer Perl automatisk mellom tall til streng etter behov. Hvordan vet Perl hva vi trenger akkurat nå? Dette er enkelt - alt avhenger av operatøren (vi snakker om operatører senere, nå, bare godta at det er mange operatører, forskjellige for tall og strenger) Hvis en operatør forventer et tall, vil Perl bruke verdien som et tall . Hvis en operatør forventer en streng, vil Perl bruke verdien som en streng. Med andre ord - du trenger ikke å bekymre deg for denne typen konvertering. Kort eksempel og alt skal være klart:
Perl-eksempler:
$string = "43"; $number = 28; $result = $string + $number; print $result;
Utgang:
71
verdien av $string konverteres til et heltall og legges til verdien av $number.
Resultatet av tillegget, 71, tilordnes $result.
Omfanget av en variabel – Tilgangsmodifikatorer
Vi kan erklære en skalar hvor som helst i programmet. Men du må spesifisere en tilgangsmodifikator
Det er 3 typer modifikatorer
- my
- lokal
- vår
Min: Ved å bruke dette kan du deklarere hvilken som helst variabel som er spesifikk i blokken. dvs. innenfor de krøllete tannreguleringene.
#!/usr/bin/perl my $var=5; if(1) { my $var_2 =$var; } print $var_2;
Ingen utgang
Utgangen av programmet blir ingenting!
I eksemplet ovenfor vil du se at det er to variabler som er erklært, den ene er innenfor if-blokken ($var_2) og den andre er utenfor If-blokken ($var). Variabelen, som er deklarert utenfor blokken, vil være tilgjengelig for if-blokken, men variabelen som ble erklært innenfor if-blokken vil ikke være tilgjengelig for det ytre programmet.
Lokal: Ved å bruke dette kan vi faktisk maskere de samme variabelverdiene til forskjellige verdier uten å faktisk endre den opprinnelige verdien til variabelen, anta at vi har en variabel $a som verdien er tildelt 5 for, kan du faktisk endre verdien til den variabelen ved å re-erklære den samme variabelen ved å bruke lokalt nøkkelord uten å endre den opprinnelige verdien av variabelen som er 5. La oss se hvordan dette fungerer med et eksempel.
#!/usr/bin/perl $var = 5; { local $var = 3; print "local,\$var = $var \n"; } print "global,\$var = $var \n";
Utdataene fra programmet ovenfor vil være på denne måten.
lokal, $var = 3
globalt, $var = 5
På denne måten kan vi endre verdien på variabelen uten å påvirke den opprinnelige verdien.
Vår: Når en variabel er deklarert med tilgangsmodifikator "vår" kan den brukes på tvers av hele pakken. Anta at du har en Perl-modul eller en pakke test.pm som har en variabel deklarert med vårt omfang. Denne variabelen kan nås i alle skript som vil bruke den pakken.
Hvis du er seriøs med programmering i Perl, bør du begynne programmet med
#!/usr/local/bin/perl
bruk streng;
Dette vil hjelpe deg med å skrive bedre og renere kode. 'bruk streng' slår på streng pragma som vil få deg til å deklarere variablene dine med søkeordet mitt.
Dette er en god programmeringspraksis
#!/usr/local/bin/perl use strict; $var = 10; print "$var";
Resultat: Feil
#!/usr/local/bin/perl use strict; my $var = 10; print "$var";
Utgang:
10
Perl Array
Hva er Perl Array?
En Array er en spesiell type variabel som lagrer data i form av en liste; hvert element kan nås ved å bruke indeksnummeret som vil være unikt for hvert element. Du kan lagre tall, strenger, flytende verdier osv. i matrisen din. Dette ser bra ut, så hvordan lager vi en matrise i Perl? I Perl kan du definere en matrise ved å bruke '@'-tegnet etterfulgt av navnet du vil gi. La oss vurdere å definere en matrise i Perl.
min @array;
Dette er hvordan vi definerer en matrise i Perl; du tenker kanskje hvordan vi trenger å lagre data i den. Det er forskjellige måter å lagre data på i en matrise. Dette avhenger av hvordan du skal bruke det.
my @array=(a,b,c,d); print @array;
Utgang:
abcd
Dette er en matrise med 4 elementer i den.
Matriseindeksen starter fra 0 og slutter til dens maksimale deklarerte størrelsen, i dette tilfellet er den maksimale indeksstørrelsen 3.
Du kan også deklarere en matrise på den ovennevnte måten; den eneste forskjellen er at den lagrer data i en matrise som vurderer et mellomrom som skilletegn. Her betyr qw() sitatord. Betydningen av denne funksjonen er å generere en liste med ord. Du kan bruke qw på flere måter for å deklarere en matrise.
@array1=qw/a b c d/; @array2= qw' p q r s'; @array3=qw { v x y z}; print @array1; print @array2; print @array3;
Utgang:
abcdpqrsvxyz
Anta at du vil tilordne en verdi til 5th element i en matrise, hvordan skal vi gjøre det.
$array [4] ='e';
Sekvensiell matrise
Sekvensielle arrays er de der du lagrer data sekvensielt. Anta at du vil lagre 1-10 tall eller alfabeter az i en matrise. I stedet for å skrive alle bokstavene, kan du prøve noe som nedenfor -
@numbers= (1..10); print @numbers; #Prints numbers from 1 to 10;
Utgang:
12345678910
Perl Array Størrelse
Vi har en matrise som allerede er tilgjengelig, og du vet ikke hva størrelsen på den matrisen er, så hva er den mulige måten å finne det på.
@array= qw/a b c d e/; print $size=scalar (@array);
Kan vi få størrelsen på en matrise uten å bruke funksjoner? Ja, det kan vi.
@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
Utgang:
5
5
Dynamic Array
Metoden ovenfor for å deklarere en matrise kalles statiske arrays, hvor du vet størrelsen på en matrise.
Hva er Dynamic Array?
Dynamiske matriser er de du erklærer uten å spesifisere noen verdi på dem. Så når nøyaktig lagrer vi verdier i den matrisen? Enkelt, vi lagrer dem under kjøretiden. Her er et enkelt program for det.
Vi vil bruke noen innebygde Perl-funksjoner for å utføre denne oppgaven.
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. }
Utgang:
Dette er
slags dyn
mic
rr
y
Del-funksjonen deler innholdet i strengen i en matrise basert på skilletegnet som er gitt til den. Denne funksjonen vil også eliminere skilletegnet fra strengen, i dette tilfellet er det 'a';
Push, Pop, shift, unshift for Perl-matriser:
Disse funksjonene kan brukes i Perl for å legge til/slette til array-elementer.
- Perl Push: legger til matriseelement på slutten av en eksisterende matrise.
- Perl Pop: fjerner det siste elementet fra en matrise.
- Perl Shift: fjerner det første elementet fra en matrise.
- Perl Unshift: legger til et element i begynnelsen av en matrise.
La oss se et eksempel hvor vi kan bruke funksjonene nedenfor.
@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";
Utgang:
1.: Man Tir Ons
2. ved trykk : Man Tir Ons Tors
3. ved uskifte: Fre Man Tir Ons Tors
4. når pop : fre man tir ons
5. når skift : Man Tir Ons
Perl Hashes
Hvorfor trenger vi Hash?
Vi har allerede lært om skalarer og matriser i tidligere seksjoner.
Hva gjør egentlig skalarer? Den lagrer bare heltall og strenger.
Hva gjør arrays egentlig? Det er en samling av skalarer, hvor du får tilgang til hvert element i en matrise ved hjelp av indekser. Men er det en god idé å bruke en matrise når du har hundrevis og tusenvis av poster? Vi vil glemme hvilken indeks som har hvilken verdi. For å overvinne denne situasjonen har vi noe som perl-hash.
Hva er hashes?
En hash kan også inneholde så mange skalarer som matrisen kan inneholde. Den eneste forskjellen er at vi ikke har noen indeks, men vi har nøkler og verdier. En hash kan deklareres, og starter med % etterfulgt av navnet på hashen. La oss se et eksempel på hvordan vi kan definere en Perl-hash og hvordan vi kan skille denne fra array
Tenk på et eksempel på tre personer og deres alder er representert i en matrise.
@array=('Sainath',23,'Krishna',24,'Shruthi',25); #This is how an array looks. print @array;
Utgang:
Sainath33Krishna24Shruthi25
På denne måten er det vanskelig å vite individuelle aldere, da vi må huske både indeksplasseringer av navn og alder på alle personene. Det kan være enkelt når du har 3 navn, men når du har 1000 eller flere? Du vet svaret.
Dette kan vi overvinne ved å bruke 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.
Utgang:
Sainath33Krishna24Shruthi25Sainath33Krishna24Shruthi25
Vi har nå erklært en hasj, flott!! Men hvordan får vi tilgang til eller skriver ut det? Hvert element i hash bør nås med tilhørende nøkkel som det vil være tildelt en verdi for. Så det er en en-en-tilordning mellom hver av nøkkelen og verdien i hashen.
For å skrive ut alderen til en person, trenger du bare å huske navnet på den personen.
print $hash{'Krishna'}; # This how we should access a hash. Key enclosed within {}.
Du har kanskje lurt på hvorfor jeg brukte $hash{KeyName}, husk at en hash er en samling av skalarer igjen. Så vi kan bruke $ som representerer skalar for å få tilgang til hvert hash-element.
Merk: Hver nøkkel i hash bør være unik, ellers vil den overstyre verdien din, som ble tildelt tidligere.
Hvordan kan vi tilordne en hash til en annen hash? Enkel, på samme måte som vi gjør for
Vi kan også skrive ut hele hasjen.
%hash=( 'Tom' => 23); %newHash=%hash; # Assigning hash to a new hashprint %newHash; print %newHash;
Utgang:
Tom23
Legg til Perl Hashes
Som du kan se har vi allerede en hash %newHash, og nå må vi legge til flere oppføringer i den.
$newHash{'Jim'}=25; $newHash{'John'}=26; $newHash{'Harry'}=27; print %newHash;
Utgang:
Jim25John26Harry27
Perl Delete-tast
Det kan være lurt å slette en oppføring fra en hash. Slik kan vi gjøre det.
delete $newHash{'Jim'};#This will delete an entry from the hash.
Slett er en innebygd funksjon i Perl. Her vil vi se et eksempel på å tilordne en hash til en matrise.
@array=%newHash; print "@array";
Merk: Når du skriver ut en hash eller når du lagrer hash i en matrise. Rekkefølgen kan alltid variere. Det er ikke alltid det samme.
Vi kan bare tilordne nøkler eller verdier av en hash til en matrise.
@arraykeys= keys(%newHash); @arrayvalues=values(%newHash); print "@arraykeys\n"; print "@arrayvalues\n"; # \n to print new line.
For å fjerne alle oppføringene i hashen, kan vi direkte tilordne hashen til null.
%newHash=();# Dette vil redefinere hashen uten oppføringer.
Perl betingede erklæringer
Vi kan bruke betingede erklæringer i Perl. Så, hva er betingede uttalelser? Betingede utsagn er de der du faktisk sjekker om noen omstendigheter er oppfylt i koden din.
Tenk på et eksempel, du kjøper noen frukter, og du liker ikke at prisen er mer enn 100 dollar. Så, regelen her er 100 dollar.
Perl støtter to typer betingede utsagn; de er hvis og med mindre.
Perl If
Hvis kodeblokk vil bli utført, når betingelsen er sann.
my $a=5; if($a==5) { print "The value is $a"; }
Utgang:
5
Perl hvis annet
Dette ser bra ut. La oss tenke på en situasjon der $a ikke er 5.
my $a=10; if($a==5) { print "The values is $a ---PASS"; } else { print "The value is $a ---FAIL"; }
Utgang:
Verdien er 10 — FAIL
På denne måten kan vi bare kontrollere én tilstand om gangen. Er det en begrensning? Nei, du kan også kontrollere ulike forhold ved å bruke 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"; }
Utgang:
Utført elsif-blokk – Verdien er 5
I tilfellet ovenfor vil elsif-blokken bli utført da $a er lik 5.
Det kan være situasjoner der både if- og elsif-kodeblokker vil mislykkes. I dette scenariet vil den andre kodeblokken bli utført. Du kan faktisk eliminere den andre kodekontrollen hvis du ikke liker å inkludere.
Perl Nested If
I dette tilfellet kan du bruke if-kodeblokk i en til if-kodeblokk.
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"; }
Utgang:
Inne i 1. annen blokk – Verdien er 11
Kjør den samme koden ved å endre verdien til $a; du kan finne ut resten.
Perl Med mindre
Du har allerede en ide om hva hvis gjør (Hvis betingelsen er sann, vil den utføre kodeblokken). Med mindre er motsatt av if, med mindre kodeblokk vil bli utfø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"; }
Utgang:
Inne i 1. annen blokk – Verdien er 5
Gjett hva som blir resultatet. Du har rett!!!!!. Utdataene vil være utskriftssetningen til else-blokken. På grunn av betingelsen i med mindre kodeblokken er sann, husk at med mindre blokk vil bli utført bare hvis betingelsen er usann. Endre verdien av $a og utfør koden du vil se forskjellen.
Perl Bruker if
$a= " This is Perl"; if($a eq "SASSDSS"){ print "Inside If Block"; } else { print "Inside else block" }
Utgang:
Inne i annen blokk
Bruker med mindre
$a= " This is Perl"; unless($a eq "SASSDSS"){ print "Inside unless Block"; } else { print "Inside else block" }
Utgang:
Inne med mindre Block
Perl Loops – Kontrollstrukturer
Perl støtter kontrollstrukturer som ligner på andre programmeringsspråk. Perl støtter fire typer kontrollstrukturer for, foreach, while og until. Vi bruker disse setningene til å utføre en eller annen kode gjentatte ganger.
For loop Perl
For kodeblokk vil utføres til betingelsen er oppfylt. La oss ta et eksempel på hvordan du Perl looper en matrise.
my @array=(1..10); for(my $count=0;$count<10;$count++) { print "The array index $count value is $array[$count]"; print "\n"; }
Utgang:
Verdien for matriseindeks 0 er 1
Verdien for matriseindeks 1 er 2
Verdien for matriseindeks 2 er 3
Verdien for matriseindeks 3 er 4
Verdien for matriseindeks 4 er 5
Verdien for matriseindeks 5 er 6
Verdien for matriseindeks 6 er 7
Verdien for matriseindeks 7 er 8
Verdien for matriseindeks 8 er 9
Verdien for matriseindeks 9 er 10
Her, i for () uttrykk, er det mange utsagn inkludert. Det er en mening for hver av dem.
for (initialisering; tilstand; økende)
Her er en annen måte å bruke for.
for(1..10) { print "$_ n"; print "\n"; }
Utgang:
1n
2n
3n
4n
5n
6n
7n
8n
9n
10n
Perl Foreach
For hver setning kan brukes på samme måte som for; Hovedforskjellen er at vi ikke har noen tilstandssjekk og økning i dette.
La oss ta det samme eksemplet med foreach perl.
my @array=(1..10); foreach my $value (@array) { print " The value is $value\n"; }
Utgang:
Verdien er 1
Verdien er 2
Verdien er 3
Verdien er 4
Verdien er 5
Verdien er 6
Verdien er 7
Verdien er 8
Verdien er 9
Verdien er 10
Foreach tar hvert element i en matrise og tildeler den verdien til $var for hver iterasjon. Vi kan også bruke $_ for det samme.
my @array=(1..10); foreach(@array) { print " The value is $_ \n"; # This is same as the above code. }
Utgang:
Verdien er 1
Verdien er 2
Verdien er 3
Verdien er 4
Verdien er 5
Verdien er 6
Verdien er 7
Verdien er 8
Verdien er 9
Verdien er 10
Dette ser bra ut for å få tilgang til arrays. Hva med hashes, hvordan kan vi få hashnøkler og verdier ved å bruke foreach?
Vi kan bruke foreach for å få tilgang til nøkler og verdier til hashen ved å sløyfe den.
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $key (keys %hash) { print "$key \n"; }
Utgang:
Mickey
Tom
Jerry
Du lurer kanskje på hvorfor vi brukte Keys i foreach(). Keys er en innebygd funksjon i Perl hvor vi raskt kan få tilgang til tastene til hashen. Hva med verdier? Vi kan bruke verdifunksjonen for å få tilgang til verdiene til 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"; }
Utgang:
verdien er 24
verdien er 23
verdien er 25
Perl Mens
Perl While-løkken er en kontrollstruktur, hvor kodeblokken vil bli utført til betingelsen er sann.
Kodeblokken avsluttes bare hvis betingelsen er falsk.
La oss ta et eksempel for Perl While loop.
Her er et problem som vil kreve inndata fra brukeren og som ikke avsluttes før nummeret oppgitt 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"
Utgang:
Gjett et tall mellom 1 og 10
9
Gjett et tall mellom 1 og 10
5
Gjett et tall mellom 1 og 10
7
Du gjettet lykketallet 7
I eksemplet ovenfor vil while-betingelsen ikke være sann hvis vi skriver inn annet enn '7'.
Hvis du ser hvordan while fungerer her, vil kodeblokken bare kjøres hvis betingelsen om en stund er sann.
Perl gjør-mens
Do while loop vil kjøre minst én gang selv om betingelsen i while-delen er usann.
La oss ta det samme eksempelet ved å bruke do while.
$guru99 = 10; do { print "$guru99 \n"; $guru99--; } while ($guru99 >= 1); print "Now value is less than 1";
Utgang:
10
9
8
7
6
5
4
3
2
1
Nå er verdien mindre enn 1
Perl til
Inntil kodeblokk ligner med mindre i en betinget setning. Her vil kodeblokken kun kjøres hvis betingelsen i inntil blokken er falsk.
La oss ta det samme eksemplet som vi brukte for en stund.
Her er et problem som vil kreve inndata fra brukeren og som ikke avsluttes før navnet oppgitt som annet enn 'sai'.
print "Enter any name \n"; my $name=<STDIN>; chomp($name); until($name ne 'sai') { print "Enter any name \n"; $name=<STDIN>; chomp($name); }
Utgang:
Skriv inn et hvilket som helst navn sai
Perl gjør-til:
Gjør til kan bare brukes når vi trenger at en betingelse skal være falsk, og den bør utføres minst é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');
Utgang:
Skriv inn et hvilket som helst navn Howard
Skriv inn et hvilket som helst navn Sheldon
Skriv inn et hvilket som helst navn sai
Kjør mens, gjør-mens, til og gjør-til-eksempelkoder for å se forskjellen.
Perl Operator
Hva er Operator?
Operatorer på dataspråk indikerer en handling som kan utføres på et sett med variabler eller verdier som datamaskinen kan forstå. Perl har innlemmet det meste Operators fra C-språk. Perl har mange operatører sammenlignet med andre programmeringsspråk. Operatorer er kategorisert som aritmetiske, logiske, relasjons- og tilordningsoperatorer.
Aritmetisk Operators:
Aritmetiske operatorer er de som kan brukes til å utføre noen grunnleggende matematiske operasjoner. Disse aritmetiske operatorene er binære operatorer der vi trenger to argumenter for å utføre en grunnleggende operasjon. Vi kan også bruke unære operatører for andre grunnleggende operasjoner; du kan se forskjellen i eksemplene nedenfor.
Operator | Description | Eksempel |
---|---|---|
+ |
Addisjonsoperasjon som brukes for å legge til to verdier eller variabler holde verdier |
$x=5+6; # eller $y=6; $z=$x+$y; |
- |
Subtraksjonsoperator som brukes for å subtrahere to verdier eller variabler som inneholder verdier |
$x=6-5; # eller $y=6; $z=$x-$y; |
* |
Multiplikasjonsoperator som brukes til å multiplisere to verdier eller variabler som inneholder verdier |
$x=6*5; # eller $y=6; $z=$x*$y; |
/ |
Divisjonsoperator som brukes for å dele to verdier eller variabler som inneholder verdier |
$x=36/6; # eller $y=6; $z=$x/$y; |
** |
Eksponentialoperatoren som brukes for å gi eksponent og få verdien. Eks: 22 = 43 = 27 |
$x=5**5; # eller $x=4; $y=2; $z=$x**$y; |
% |
Modulus-operator brukes til å få påminnelsen under deling av to verdier eller variabler som inneholder verdier |
$x=5%2; # eller $x=10; $y=2; $z=$x % $y; |
++ |
Unær addisjonsoperator for å øke verdien av en variabel med 1 |
$x=5; $x++; Or ++$x; |
- |
Unær subtraksjonsoperator for å redusere verdien av en variabel med 1 |
$x=5; $x–; # post dekrement Or –$x;# før reduksjon |
Eksempel for å fullføre alle operasjonene ovenfor.
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");
Utgang:
Legg til 10 og 2 er 12
Sub av 10 og 2 er 8
Mul på 10 og 2 er 20
Div på 10 og 2 er 5
Exp på 10 og 2 er 100
Mod av 10 og 2 er 0
Oppdrag Operators:
Tilordningsoperatorer tildeler ganske enkelt verdier til variabler, men det er en ting til som vi må huske på her, tilordningsoperatorer vil også utføre aritmetiske operasjoner og tilordne den nye verdien til den samme variabelen som operasjonen utføres på.
Operator | Description | Eksempel |
---|---|---|
+= |
Addisjonsoperator som brukes for å legge til og tilordne verdien til samme variabel |
$x=4; $x+=10; |
-= |
Subtraksjonsoperator som brukes for å trekke fra og tilordne verdien til samme variabel |
$x=4; $x-=10; |
*= |
Multiplikasjonsoperator som brukes for å legge til og tilordne verdien til samme variabel |
$x=4; $x*=10; |
/= |
Divisjonsoperator som brukes for å dele og tilordne verdien til samme variabel |
$x=4; $x/=10; |
** = |
Eksponentiell operator som brukes for å få eksponent og tilordne verdien til samme variabel |
$x=4; $x**=10; |
%= |
Modulus-operator brukes for å få en påminnelse under deling og tilordne verdien til samme variabel |
$x=10; $x%=4; |
Eksempel for å fullføre alle operasjonene ovenfor.
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");
Utgang:
Legg til = 15
Sub= 10
Mul = 50
Div = 10
Logisk og relasjonell Operators:
Perl bruker logiske operatorer for å sammenligne tall og strenger. Mesteparten av tiden brukes logiske operatorer i betingede utsagn.
Operator | Description |
---|---|
==eller lign |
Operator brukes til å sjekke om begge variablene er like |
!=Eller nei |
Operator brukes til å sjekke om begge variablene ikke er like |
> eller gt |
Operator brukes til å sjekke om A er større enn B |
<or lt |
Operator brukes til å sjekke om A er mindre enn B |
>=eller ge |
Operator brukes til å sjekke om A er større enn eller lik B |
<=eller le |
Operator brukes til å sjekke om A er mindre enn eller lik B |
|| eller eller |
Operator brukes til å kontrollere at enten A eller B holder verdien |
&&eller og |
Operator brukes til å kontrollere at både A og B holder verdi |
La oss ta et eksempel der vi kan forklare alle scenariene.
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"); }
Utgang:
Sant - lik 5 og 5
Sant - ikke lik 6 og 7
Sant – 7 større enn 6
Sant - 6 mindre enn 7
Sant - 6 mindre enn 7
Sant – 7 større enn 6
Du kan se eksempler på logiske operatorer i senere avsnitt.
Perl spesialvariabler
Hva er Perl Special Variables?
Spesielle variabler i Perl er de som har en forhåndsdefinert betydning. Disse variablene er merket med enten ekte navn eller tegnsettingssymboler. Vi har en spesialvariabel for alle Perl-støttede variabler som skalære spesialvariabler, Array spesialvariabler, hash spesialvariabler. De fleste spesialvariablene vi bruker er av skalarer.
Når vi vil bruke spesialvariabelen med navnet, må vi laste inn en Perl-modul "bruk engelsk", for å eksplisitt si Perl-tolker at vi skal bruke spesielle variabler ved å bruke navnet.
Skalære spesialvariabler
Variabel | Description |
---|---|
$_$ARG |
Dette er standardvariabelen som lagrer gjeldende verdier. |
$0 eller $PROGRAM_NAME |
Lagrer filnavnet til Perl-skriptet. |
$/ |
Inndatapostseparatoren, denne har en standardverdi på '\n' som er nylinjetegn |
$. |
Inneholder gjeldende linjenummer for filen som leses |
$, |
Utdatafeltseparator, dette brukes hovedsakelig av print()-setningen. Som standard er verdien av denne satt til 0, vi kan endre verdien på denne variabelen. |
$\ |
Utdatapostseparator, verdien av denne variabelen vil være tom; vi kan tilordne hvilken som helst verdi til dette, som vil bli brukt av print()-setningen mens utskriften skrives ut. |
$# |
Denne variabelen brukes for utdataformat mens du skriver ut tall. |
$%$FORMAT_PAGE_NUMBER |
Holder gjeldende sidenummer for filen som er lest. |
$=$FORMAT_LINES_PER_PAGE |
Vil holde gjeldende sidelengde på filen lest. |
$-$FORMAT_LINES_LEFT |
Inneholder verdien av antall linjer som gjenstår å skrive ut fra siden. |
$~$FORMAT_NAME |
Formatnavn: Holder formatet til den valgte utdata som standard filhåndtaksnavnet. |
$^$FORMAT_TOP_NAME |
Inneholder verdien av overskriftsformatet til filbehandleren, som standardverdi vil være _TOP etterfulgt av filhåndtaksnavn. |
$|$OUTPUT_AUTOFLUSH |
Standard er null; dette brukes til å tømme utgangsbufferen etter hver write() eller print(). |
$$ |
Vil holde det kjørende prosessnummeret til Perl-tolken. |
$? |
Statuskode : Rør- og systemanrop. Returstatusen til kommandoen som er utført. |
$&$MATCH |
Brukt i regulære uttrykk, vil dette inneholde en streng av den siste vellykkede mønstermatchen. |
$`$ PREMATCH |
Brukt i regulære uttrykk, vil dette holde streng foran sist vellykkede mønstermatch. |
$'$POSTMATCH |
Brukt i regulære uttrykk, vil dette inneholde en streng som etterfølges av den siste vellykkede mønstermatchen. |
$+$LAST_PAREN_MATCH |
Holder strengen til den siste parentesen som samsvarer med det siste mønstersøket. |
$ |
$1, $2, $3 …. Holder verdiene til mønsteret matchet i rekkefølge. |
$[ |
Første indeks: Array, en understreng. |
$] |
En versjon av Perl. |
$” |
Skilletegn som brukes for listeelementer, er som standard et mellomrom. |
$; |
Subscript separator brukt i flerdimensjonale arrays |
$! |
Skriver ut feilnummeret i numerisk sammenheng. Skriv ut feilen i strengkontekst. |
$@ |
Vil holde syntaksfeilinformasjonen, brukt når eval() brukes. |
$< |
Inneholder den virkelige UID (bruker-ID) til prosessen som kjører skriptet. |
$> |
Inneholder den effektive UID-en til prosessen som kjører skriptet. |
$( |
Inneholder den virkelige GID (gruppe-ID) for prosessen som kjører skriptet. |
$) |
Inneholder den effektive GID-en til prosessen som kjører skriptet. |
$^D$DEBUGGING |
Holder gjeldende verdi av feilsøkingsflaggene. |
$^C |
Holder gjeldende verdi av flagget når –c kommandolinjebryter brukes. |
$^F |
Maksimal systemfilbeskrivelse, som standardverdi, er satt til 2 |
$^I$INPLACE_EDIT |
Holder verdien av –i kommandolinjebryter. |
$^M |
Spesiell minnepool kan brukes når Perl-skript dør med en ut-av-minnefeil. |
$^O$OSNAME |
Operasysteminformasjon lagres. 'Linux' for Linux-systemer, 'mswin32' for Windows systemer. |
$^T$ BASETIME |
Tiden når skriptene kjører i sekunder. |
$^W$ADVARSEL |
Gjeldende verdi av kommandolinjebryteren –w. Advarselsbryter. |
$ARGV |
Navn på gjeldende fil, når <> brukes. |
Spesialvariabler for matrise:
Variabel | Description |
---|---|
@INC |
Inneholder en liste over stier der Perl-biblioteksmoduler eller skript kan ses på mens det gjeldende skriptet kjøres. Denne @INC brukes av bruk og krever setninger for å se på disse banene for bibliotekmoduler. |
@ARGV |
Lagrer kommandolinjeargumentene som sendes. |
@_ |
Brukes i subrutiner, mens parametrene overføres til subrutinene. |
@F |
Dette er matrisen som inngangslinjene lagres i når autosplitt -a (kommandolinjebryter brukes). |
Hash spesialvariabler:
Variabel | Description |
---|---|
%INC |
Filnavnet vil være nøklene; verdier vil være banen til disse filene. Brukes av gjør, bruk og krever. |
%ENV |
Systemmiljøvariabler. |
%SIG |
Signals handler. |
Perl regulært uttrykk
Hva er regulært uttrykk?
Perl regulære uttrykk er sterk nok til å matche strengmønstrene i et utsagn eller en gruppe av utsagn. Regulære uttrykk brukes mest i tekstparsing, mønstertilpasning og mye mer basert på kravet. Vi har visse operatorer, som er spesielt brukt av regulære uttrykksmønsterbinding =~ og !~, Dette er test- og tilordningsoperatorer.
Regular Expression Operatorer
- Perl Match — m//
- Perl-erstatning – s///
- Perl Translitterate – tr///
Før vi går videre, trenger vi å vite noen ting om regulære uttrykk; det er visse ting som Meta-karakterer, jokertegn i Perl Regex-syntaks.
chariot | Betydning |
---|---|
\ |
Spesial eller tilbud |
* |
Match 0 eller flere tegn |
+ |
Match 1 eller flere tegn |
? |
Match 0 eller 1 tegn |
| |
Kan brukes til å matche alternative mønstre |
() |
Brukes til å lagre matchende mønster |
[] |
Sett med tegn kan passeres. Spesielt brukt for numeriske og alfabeter. |
{} |
Brukes for å angi antall ganger kampen kan utføres. |
^ |
Start av strengen |
$ |
Slutt på streng |
\w |
Brukes for å matche et enkelt tegn eller ord som kan være alfanumerisk inkludert "_" |
\W |
Match alt annet enn alfanumerisk |
\s |
Brukes til å matche mellomrom |
\S |
Match alt annet enn mellomrom |
\d |
Match tall. Ikke desimalverdier og negative verdier |
\D |
Match alt annet enn tall. |
\t |
Match faneplass |
\n |
Match ny linje |
Ovennevnte er settet med tegn som kan brukes under mønstertilpasning.
La oss se noen eksempler.
Tenk på en situasjon der brukeren gir noen input under kjøring av skript, og vi ønsker å sjekke om brukeren har skrevet inn et navn som input eller ikke. Vi må skrive en syntaks for regulære uttrykk for å trekke ut navnet ditt og skrive ut det samme.
my $userinput="Guru99 Rocks"; if($userinput=~m/.*(Guru99).*/) { print "Found Pattern"; } else { print "unable to find the pattern"; }
Utgang:
Funnet mønster
Her har vi skrevet det regulære uttrykket som /.*(Guru99).*/.* samsvarer med alle tegn i en streng. En '.' i perl regex match refererer til et hvilket som helst tegn inkludert mellomrom.
La oss se nøyaktig hvordan vi kan konstruere en Regex.
Tenk på et eksempel på en streng med flere ord og sifre og spesielle symboler som dette "Hei alle sammen, dette er nummeret mitt: +91-99298373639";
Regex: /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i
Ordrom ordmellomrom ordmellomrom ordmellomrom ordmellomrom ordmellomrom spesialtegn: mellomrom spesialtegn+siffer spesialtegn –siffer.
Perl Match Operatorer
Matchoperatorene brukes til å matche en streng i en setning eller i en variabel.
my $var="Hello this is perl"; if($var=~m/perl/) { print "true"; } else { print "False"; }
Utgang:
sant
Denne lille koden vil skrive ut "true", ettersom perl-mønstertilpasningen identifiserer strengen i en variabel. I utgangspunktet søker Perl etter teksten som er gitt i // i hele strengen, selv om den finner på ett sted vil den returnere "true". Mønsteret kan være hvor som helst i variabelen. Vi kan prøve å erstatte =~ med !~ for å se forskjellen mellom disse to operatørene.
Perl-bytte Operator
Denne operatoren kan brukes til å søke og erstatte et hvilket som helst tegn med enten null eller et annet tegn.
my $a="Hello how are you"; $a=~s/hello/cello/gi; print $a;
Utgang:
cello hvordan har du det
Merk: Vi kan faktisk bruke hvilken som helst mønstermatchende streng som vi gjorde tidligere i denne erstatningsoperatoren også. Her brukte vi 'gi', g-globalt, i-ignore case.
Perl-oversettelse Operator
Dette ligner på Substitution, men det bruker ingen perl regulære uttrykk, snarere kan vi sende verdien eller et ord som vi ønsker å erstatte direkte.
my $a="Hello how are you"; $a=~tr/hello/cello/; print $a;
Utgang:
Hei ku er du
Perl-fil I/O
Perl ble designet for å manipulere filer og I/O-operasjoner effektivt. Perl største fordel er i filparsing og håndtering av filene. Det er mange innebygde funksjoner og operatører som brukes under filhåndtering i Perl.
I utgangspunktet gjøres filoperasjoner som utføres med Perl ved hjelp av FILEHANDLE. Vi må definere dette FILEHANDLE under åpningen av en fil for enten å lese eller skrive.
I denne Perl-skriptopplæringen vil du lære-
Perl Åpne filen
Vi kan åpne en fil ved å bruke open() funksjonen tilgjengelig i Perl.
open(FILEHANDLE, "filename or complete path of the file");
Nå har vi åpnet en fil, nå dukker det opp et spørsmål. Er det for å lese eller skrive?
Perl Les fil og Perl Skriv fil
Perl har visse moduser som må brukes til å lese, skrive eller legge til 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");
Noen eksempler for å lese en fil:
Tenk på at vi har en perl-fil med navnet file.txt og har noen få linjer med tekst i den. Vi må åpne denne filen og skrive ut 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 skrive ut filinnholdet på utdataskjermen.
Nå skal vi skrive et program for å lage og skrive data til en perl-fil.
open(FH,">test.txt"); my $var=<>; print FH $var; close FH;
Dette vil skrive inndataene som ble gitt under kjøring og oppretter en fil test.txt som vil ha inndata.
Metoden ovenfor vil alltid prøve å lage en fil som heter test.txt og skriver inndataene inn i filen; vi vil skrive det samme for å legge til filen.
open(FH,">>test.txt"); my $var=<>; print FH $var; close FH;
Moduser | Description |
---|---|
< |
Lese |
+< |
Leser og skriver |
> |
Skaper, skriver og avkorter |
+> |
Les, skriv, skap og avkort |
>> |
Skriver, legger til og lager |
+>> |
Les, skriv, legger til og lag |
Nå som vi må se hvordan du leser, skriver og legger til filer ved å bruke grunnleggende eksempler.
Vi vil se noen flere eksempler og andre funksjoner som hjelper deg med å forstå mer om filer.
Perl Fortell
Denne metoden vil returnere den nåværende posisjonen til FILEHANDLER i byte hvis spesifisert ellers vil den vurdere den siste linjen som posisjonen.
open(FH, "test.pl"); while(<FH>) { $a=tell FH; print "$a"; }
Perl Seek
Søkefunksjonen ligner på fseek-systemanropet. Denne metoden brukes til å plassere filpekeren til et bestemt sted ved å spesifisere byte etterfulgt av enten starten på filpekeren eller slutten av filpekeren.
seek FH, bytes, WHENCE;
HVORNÅR er posisjonen til filpekeren som skal starte. Null vil sette den fra begynnelsen av filen.
Eksempel: La input.txt ha noen data som «Hei, dette 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;
Utgang:
dette er min verden
Perl Unlink
Unlink brukes til å slette filen.
unlink("filename or complete file path");
Håndtering av kataloger:
Vi kan også håndtere kataloger der vi kan håndtere flere filer.
la oss se hvordan du åpner en katalog. Vi kan bruke opendir- og readdir-metodene.
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 skrive ut alle tilgjengelige filer i den katalogen.
Perl-filtester og deres betydning
-r |
For å sjekke om fil/katalog er lesbar av gjeldende bruker/gruppe |
-w |
For å sjekke om fil/katalog er skrivbar av gjeldende bruker/gruppe |
-x |
For å sjekke om fil/katalog er kjørbar av gjeldende bruker/gruppe |
-o |
For å sjekke om fil/katalog eies av gjeldende bruker |
-R |
For å sjekke om fil/katalog er lesbar av denne ekte brukeren/gruppen |
-W |
For å sjekke om fil/katalog er skrivbar av denne ekte brukeren/gruppen |
-X |
For å sjekke om fil/katalog er kjørbar av denne ekte brukeren/gruppen |
-O |
For å sjekke om fil/katalog eies av denne ekte brukeren |
-e |
For å sjekke om fil-/katalognavn finnes |
-z |
For å sjekke om filen eksisterer og har null størrelse (alltid usann for kataloger) |
-f |
For å sjekke om Entry er en vanlig fil |
-d |
For å sjekke om Entry er en katalog |
-l |
For å sjekke om Entry er en symbolsk lenke |
-S |
For å sjekke om Entry er en stikkontakt |
-p |
For å sjekke om Entry er et navngitt rør (en "FIFO") |
-b |
For å sjekke om Entry er en blokkspesiell fil (som en monterbar disk) |
-c |
For å sjekke om Entry er en spesialfil med tegn (som en I/O-enhet) |
-u |
For å sjekke om fil eller katalog er setuid |
-g |
For å sjekke om fil eller katalog er setgid |
-k |
For å sjekke om fil eller katalog har klistrebiten satt |
-t |
Den gitte filhåndtaket er en TTY (som av isatty() systemfunksjonen, filnavn kan ikke testes med denne testen) |
-T |
For å sjekke om filen ser ut som en "tekst"-fil |
-B |
For å sjekke om filen ser ut som en "binær" fil |
-M |
For å sjekke endringsalderen (målt i dager) på filen |
-A |
For å sjekke tilgangsalder (målt i dager) til filen |
-C |
For å sjekke Inode-modifikasjonsalderen (målt i dager) på filen |
Perl subrutine
Hva er subrutine?
Subrutiner ligner på funksjoner i andre programmeringsspråk. Vi har allerede brukt noen innebygde funksjoner som print, chomp, chop osv. Vi kan skrive våre egne subrutiner i Perl. Disse subrutinene kan skrives hvor som helst i programmet; det er å foretrekke å plassere subrutinene enten i begynnelsen eller på slutten av koden.
Eksempel på subrutiner
sub subroutine_name { Statements…; # this is how typical subroutines look like. }
Nå som vi vet hvordan vi skriver en subrutine, hvordan får vi tilgang til den?
Vi må få tilgang til eller kalle opp en subrutine ved å bruke subrutinenavnet prefikset med '&'-symbolet.
sub display { print "this is a subroutine"; } display(); # This is how we call a subroutine
Sender Perl-parametere og Perl-argumenter
Subrutiner eller perl-funksjon er skrevet for å plassere den gjenbrukbare koden i den. Det meste av den gjenbrukbare koden krever at parametere sendes til subrutinen. Her vil vi lære hvordan vi kan sende 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.
Utgang:
3 er verdien passert
@_ er en spesiell matrisevariabel som lagrer argumentene som sendes til subrutinene.
Perl Shift
Vi kan også bruke 'shift' nøkkelord som flytter én parameter om 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");
Utgang:
hei er bestått
Subrutiner brukes vanligvis i objektorientert programmering og også på steder hvor du kan ha mer gjenbrukbar kode som skal plasseres.
Hovedfunksjonen til subrutiner er å gjøre en oppgave og returnere resultatet av den gjenbrukbare koden.
Vi kan returnere en verdi fra subrutine ved å bruke nøkkelordet return.
sub add { my $a=shift; my $b=shift; return($a+$b); } my $result=add(5,6); print $result;
Utgang:
11
$result vil inneholde verdien av $a og $b lagt til.
Vi kan også sende hasher og array direkte til subrutinen.
sub hash { my %hash=@_; print %hash; } %value= ( 1=>'a', 2=>'b'); &hash(%value);
Utgang:
1a2b
Vi kan også returnere en hash eller en matrise.
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;
Utgang:
Inne i Sub-rutine2b1aEtter Sub-rutine call2b1a
Perl-format
Perl har en mekanisme som vi kan bruke til å generere rapporter. Ved å bruke denne funksjonen kan vi lage rapporter akkurat slik vi ønsker mens vi skriver ut på Output-skjermen eller i en fil. Et enkelt format kan skrives ved å bruke printf- eller sprintf-funksjonene som er tilgjengelige i Perl.
printf "%05d\n", 30;
Dette vil inkludere innledende nuller foran nummer 30 som gjør en total telling av sifre til 5. Det samme kan brukes for sprintf.
sprintf "%05d\n", 30; # This will print the same as printf.
Ved å bruke printf og sprintf kan vi få tak i de fleste Perl-formatene. Ved rapporter vil det være vanskelig å gjennomføre.
================================================== =========================
Navn Adresse Alder Telefon
================================================== =========================
Krishna Chennai 24 929309242
Shruthi Chennai 24 929309232
Ovenstående er eksempler på rapporter som vi trenger å skrive ut på samme måte i Perl. Dette kan oppnås ved å bruke perl printf og perl sprintf. Det kan effektivt implementeres ved hjelp av format.
Et format kan deklareres på følgende måte.
format FORMATNAME=FORMATLIST.
Her vil vi bruke en bestemt metode for å skrive ut dataene på utdataskjermen eller inn i filen.
symbol | Description |
---|---|
@ |
Brukes til å representere starten på feltholderen |
> |
Høyrejustering av tekst |
< |
Venstrejustering av tekst |
| |
Senterjustering |
# |
Numerisk hvis flere # er oppgitt. Antar som en kommentar hvis enkelt # oppgitt |
. |
Desimal tegn |
^ |
Start av feltholder kan også brukes til multiline og også for ord-omslag |
~ |
Linjen skal være tom hvis variabelen 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 .
Kjør koden for å se utdataene.
Vi bruker @-symbolet for å spesifisere starten på feltholderen eller strengen, '<' hvert tegn.
Vi bruker STDOUT for å skrive ut på standardutgangen. Vi kan endre dette til filbehandler som vi bruker til å skrive data inn 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 å endre justeringen av teksten. STDOUT_TOP brukes til å designe overskriften til formatet. Vi kan også bruke det samme med filbehandler som bruker FH_TOP( FH er filbehandleren). Dette vil sende ut formatet til filen som vi jobber med på.
Perl-kodingsstandarder
Hver programmerer vil ha sin egen følelse av å skrive koden ved å bruke visse standarder; disse standardene bør være kjent nok til at andre programmerere kan forstå og støtte koden på riktig måte.
Å skrive kode er enkelt og greit. Problemet oppstår når det skal vedlikeholdes på senere stadier. Riktige retningslinjer og kodestandarder må følges mens du skriver koden. Perl definerer også visse standarder som vil være nyttige for programmerere å skrive kode. Det er tilrådelig å laste inn 'streng' og 'advarslingsmodul' mens du skriver koden. Hver av disse modulene har sin egen betydning. Strict vil få oss til å erklære variabelen før bruk og vil også fortelle om det finnes et bart ord i koden din. Advarselsmodulen kan alternativt brukes ved å sende '-w'-alternativet til Perl-tolken i shebang. Advarsler skrives ut på utdataskjermen.
#!/usr/bin/perl –w
Nedenfor er noen lister over standarder.
- Bruk modulene "streng" og "advarsler".
- Fjern variabel som ikke er i bruk.
- Variabelnavn bør være forståelige for andre brukere. Eks: $navn, @filData osv.
- Dokumentasjon kreves ved koding av et skript.
- Ikke hardkod noen verdier, prøv heller å hente dem dynamisk eller be brukeren om å angi under kjøring.(Filbane, Filnavn).
- Maksimer gjenbruk av kode. Prøv å sette den gjenbrukbare koden i subrutiner.
- Det betyr at fulle navn skal oppgis for subrutiner.
- Subrutiner må skrives med passende kommentarer og dokumentasjon.
- Initialiser alltid variabler.
- Sjekk alltid returkodene for systemanrop. Åpning av en fil kan skje eller ikke, å ha en returkode her vil vise feilstatusen hvis filen ikke eksisterer.
Eks: åpen(FH,
- Subrutine skal alltid returnere en verdi.
- Åpne krøllete i samme linje.
- Enkel linje BLOKK kan plasseres i en enkelt linje med krøllete.
- Bruk etiketter under løkkene, det vil være lett å gå ut av løkken når det er nødvendig.
- Bruk understrek mens lange fraser av ord skrives som et variabelnavn eller subrutine.
- Prøv å bruke enkel regex mens du koder.
Perfekt eksempel med kodestandarder:
####################################################################### 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 Feilhåndtering
Hva er et unntak?
Et unntak er en hendelse som oppstår under programkjøringen som vil suspendere eller avslutte programmet.
Feilhåndtering
Feilhåndtering er en som hver programmerer må passe på under programmeringen. Perl tilbyr også feilhåndteringsteknikker som vi kan fange feilen med og håndtere dem deretter.
Det er mange måter å se etter feil i programmet. Vi må undersøke returkodene til funksjonen som vi bruker kode. Hvis vi er i stand til å håndtere disse returkodene riktig, kan det meste av feilhåndteringen oppnås.
Hva vil returnere ved systemanrop?
Ved systemanrop vil returstatusen bli lagret i to spesielle variabler $? Og $!
$! – Dette vil fange opp feilnummeret eller feilnummeret knyttet til feilmeldingen.
$? – Dette vil inneholde funksjonen returstatussystem().
Bruker Perl-operator eller Logical
Vi kan bruke logisk eller operatør for feilhåndtering ved bruk av systemanrop.
ex:
open(FH,"<test.txt");
Dette vil åpne filen i lesemodus hvis filen eksisterer.
Hva om 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-funksjonen kan håndtere fatale feil, kompileringstidsfeil, kjøretidsfeil og de feilene som avslutter koden din på et tidspunkt.
Perl Eval-funksjonen kan ha en kodeblokk eller et uttrykk. Evals anser alt som er plassert i den som en streng.
Tenk på en situasjon med å ringe en subrutine som ikke er definert i skriptet. I denne situasjonen avsluttes skriptet og sier "udefinert subrutine &XYZ, denne feilen kan håndteres i eval-funksjonen.
Det er mange bruksområder for evals-blokker; en slik bruk er når vi ønsker å laste modulen som er spesifikk for operativsystemet under kjøring.
Eks: Divisjon med null forårsaker en fatal feil; for å håndtere dette kan vi plassere koden i evals-blokken.
$a=5; $b=0; eval { '$result=$a/$b'; } if($@) { print "$@"; # All the error codes returned by evals will get stored in $@. }
Utgang:
syntaksfeil ved C:\Users\XYZ\Text.pl linje 8, nær ")
{“
Kjøring av C:\Users\XYZ\Text.pl ble avbrutt på grunn av kompileringsfeil.
Eksempel: eval ved hjelp av perl die-setning.
sub test { die "Dieing in sub test \n"; } eval { test(); }; print "Caught : $@\n";
Utgang:
Fanget : Døende i deltest
Bruker Perl Try
Perl støtter ikke try, catch og til slutt kodeblokker som andre programmeringsspråk. Vi kan fortsatt bruke dem ved å laste inn en ekstern Perl-modul.
bruk Prøv::Tiny;
Ved å bruke dette kan vi plassere koden din i prøveblokken og fange opp feilen i advarselsblokken.
I stedet for $@ brukt i eval Prøv::Tiny bruker $_.
# håndtere feil med en fangstbehandler
try { die "Die now"; } catch { warn "caught error: $_"; # not $@ };
Bruker til slutt.
my $y; try { die 'foo' } finally { $y = 'bar' }; try { die 'Die now' } catch { warn "Returned from die: $_" } finally { $y = 'gone' };
Utgang:
foo på C:\Users\XYZ\Text.pl linje 4.
Vi kan bruke prøve, fange og til slutt på denne måten.
prøv { # statement }
catch {# statement }
til slutt { # statement };
Or
try { # statement } finally { # statement };
Utgang:
Or
try { # statement } finally { # statement } catch { # statement };
Utgang:
Perl Socket programmering
Hva er en stikkontakt?
Socket er et medium der to datamaskiner kan samhandle på et nettverk ved å bruke nettverksadresse og porter.
Anta at A (Server) og B (Client) er to systemer som må samhandle med hverandre ved å bruke Sockets for å kjøre noen programmer.
For å implementere dette må vi lage sockets i både A (Server) og B (Client), A vil være i mottakertilstand og B vil være i sendetilstand.
A (server):
Her ønsker serveren å motta en tilkobling fra B (Client) og utføre noen oppgaver og sende resultatet tilbake til B (Client). Når vi kjører koden, prøver operativsystemet i A å lage en socket og binder en port til den socket. Da vil den lytte fra avsenderen som er B.
B (klient).
Her ønsker klienten å sende noe program fra systemet sitt til A (Server) for litt behandling. Når vi kjører koden prøver operativsystemet i B å lage en socket for å kommunisere med A (Server), B må spesifisere IP-adressen og portnummeret til A som B ønsker å koble seg til.
Hvis dette går bra, vil begge systemene samhandle for å utveksle informasjonen gjennom én port. Perl støtter også socket-programmering.
Perl har en innebygd API som sockets kan implementeres gjennom. For å gjøre det enkelt, er det mange CPAN-moduler som vi bruker som vi skriver socket-programmer.
Serveroperasjoner:
- Lag Socket
- Bind stikkontakt med adresse og port
- Lytt til kontakten på den portadressen
- Godta klienttilkoblingene som prøver å koble til ved hjelp av porten og IP-en til serveren
- Utfør operasjoner
kunde Operatjoner:
- Lag Socket
- Koble til server ved å bruke portadressen
- Utfør operasjoner
socket.io
Dette er én modul for socket-programmering, som er basert på objektorientert programmering. Denne modulen støtter ikke INET-nettverkstypen som brukes i nettverk.
IO::Socket::INET:
Denne modulen støtter INET-domene og er bygget på IO::Sockets. Alle metodene som er tilgjengelige i IO::Sockets arves i INET-modulen.
Klient og server som bruker TCP-protokoll:
TCP er en tilkoblingsorientert protokoll; vi vil bruke denne protokollen for socket-programmering.
Før vi går videre, la oss se hvordan vi kan lage et objekt for IO::Socket::INET-modulen og lage 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 metoden i IO::Socket::INET-modulen aksepterer en hash som en inngangsparameter til subrutinen. Denne hashen er forhåndsdefinert, og vi trenger bare å gi verdiene til nøklene vi vil bruke. Det er en liste over nøkler som brukes av denne hashen.
PeerAddr |
Ekstern vertsadresse |
PeerHost |
Synonym for PeerAddr |
PeerPort |
Ekstern port eller tjeneste |
LocalAddr |
Lokal vertsbindingsadresse |
localhost |
Synonym for LocalAddr |
LocalPort |
Lokal vertsbindingsport |
Proto |
Protokollnavn (eller nummer) |
typen |
sokkeltypen |
Lytt |
Køstørrelse for å lytte |
GjenbrukAddr |
Sett SO_REUSEADDR før binding |
gjenbruk |
Sett SO_REUSEADDR før binding |
Gjenbruk port |
Sett SO_REUSEPORT før innbinding |
Kringkaste |
Sett SO_BROADCAST før binding |
Timeout |
Timeout-verdi for ulike operasjoner |
MultiHomed |
Prøv alle adresser for multihomed-verter |
blokkerer |
Bestem om tilkoblingen vil være blokkeringsmodus |
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);
OBS:
I socket-programmering må vi først kjøre Server.pl og deretter client.pl individuelt i forskjellige kommandoprompter hvis vi kjører på lokal vert.
Hva er Perl-moduler og -pakker
Moduler og pakker er nært knyttet til hverandre og er uavhengige. Pakke: En Perl-pakke er også kjent som navneområde og som har alle unike variabler som brukes som hasher, arrays, skalarer og subrutiner. Modul: Modul er en samling gjenbrukbar kode, hvor vi skriver subrutiner i den. Disse modulene kan lastes inn i Perl-programmer for å gjøre bruk av subrutinene som er skrevet i disse modulene.
Hva er Perl-moduler?
Standardmoduler vil bli installert under installasjon av Perl på ethvert system. CPAN: Omfattende Perl Archive Network – Et globalt depot av Perl-moduler. Våre egne tilpassede Perl-moduler som kan skrives av oss. I utgangspunktet vil en modul når den lastes inn i et hvilket som helst skript eksportere alle sine globale variabler og subrutiner. Disse subrutinene kan ringe direkte som om de var deklarert i selve skriptet. Perl-moduler kan skrives med filtypen .pm til filnavnet Ex : Foo.pm. En modul kan skrives ved å bruke 'pakke Foo' i begynnelsen av programmet.
Grunnleggende 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 utgang
For å bruke denne Perl-modulen, må vi plassere den i den gjeldende katalogen.
Vi kan laste inn en Perl-modul ved å bruke require eller bruke hvor som helst i koden. Den største forskjellen mellom krever og bruk er, krever lastet modul under kjøretid og bruk laster under kompileringstiden.
#!/usr/bin/perl require Arithmetic; print Arithmetic::add(5,6); print Arithmetic:: subtract (5,6);
Her, i eksemplet ovenfor, får vi tilgang til subrutinene ved å bruke fullt kvalifisert modulnavn.
Vi kan også få tilgang til pakken ved å bruke 'bruk aritmetikk'.
Eksportør:
Denne modulen har en standard funksjonalitet 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 brukes til å sende en liste over variabler og subrutiner som som standard vil bli eksportert til den som ringer modulen.
@EXPORT_OK array kan brukes til å sende en liste over variabler og subrutiner som vil bli eksportert på forespørsel, der brukeren må spesifisere mens modulen lastes.
#!/usr/bin/perl use Arithmetic qw(subtract); print add(5,6); print subtract (5,6);
Som standard vil legg til subrutine bli eksportert. Subtraheringsmetoden vil ikke bli eksportert hvis den ikke er spesifisert under innlasting av modulen.
Objektorientert programmering i Perl
I denne delen lærer vi hvordan du lager Perl-objektorienterte moduler. La oss først se hva som er objektet? Et objekt er en instans som vi kan bruke til å få tilgang til, modifisere og lokalisere noen data i enhver Perl-modul. Dette er ingenting annet enn å få din eksisterende Perl-pakke, variabler og subrutiner til å fungere som klasse, objekter og metoder i forhold til andre programmeringsspråk.
Opprett klasse
Vi vet allerede hvordan vi lager moduler fra forrige emne. Hensikten med klassen er å lagre metoder og variabler. En Perl-modul vil ha subrutiner som er metoder. Vi må få tilgang til disse variablene og subrutineobjektene.
Perl-konstruktør
En konstruktør i Perl er en metode som vil utføre og returnere oss en referanse med modulnavnet tagget til referansen. Dette kalles velsignelse for klassen. Vi bruker en bestemt variabel for å 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 metoden som brukes som konstruktør for en klasse, Denne konstruktøren vil lage et objekt for oss og vil gå tilbake til skriptet som kaller denne konstruktøren.
#!/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 må vi forstå hvordan objektet ble opprettet. Hver gang vi prøver å lage et objekt for klassen, må vi bruke hele navnet på klassen. Anta at hvis perl-klassen er plassert i noen lib\Math\Arithmetic.pm. Og hvis vi ønsker å få tilgang til denne perl-klassen fra lib-katalogen, må vi oppgi hele banen til klassen mens vi kaller inn skriptet.
bruk lib::Matte::Aritmetikk;
my $obj = lib::Math::Arithmetic->new();
Slik skjer objektskapingen i Perl.
@INC:
Hvordan vet Perl-skriptet hvor bibliotekmodulen finnes? Perl vet bare om gjeldende katalog for skriptet og Perl innebygde biblioteksti. Når vi bruker, og Perl-modulen, som ikke er plassert i gjeldende katalog eller Perl-biblioteksti, vil skriptet alltid mislykkes. Om @INC, dette er en matrise som inneholder alle katalogstier der den må lete etter Perl-modulene. Prøv å utføre denne kommandoen og se hva som blir resultatet.
perl –e "print @INC"
Dette vil gi noe utdata, og det er banen der lib-modulene vil være tilgjengelige. Hver gang vi bruker en ny bibliotekmodul, må vi fortelle Perl, tolk, om å se nærmere på det bestemte stedet der Perl-modulen er tilgjengelig.
push(@INC, "PATH TO YOUR MODULE");
Gjør dette som din første linje med kode. Dette vil fortelle tolken din om å se på den banen. eller bruke
lib Arithmetic; # List here is your Perl Module location
Perl Destructor
Destruktoren til et objekt kalles som standard på slutten og før skriptet avsluttes. Dette brukes til å ødelegge objektene dine fra minnet.
PERL V/s Shell Scripting
- Programmering i Perl forårsaker ikke portabilitetsproblemer, noe som er vanlig når du bruker forskjellige skall i skallskripting.
- Feilhåndtering er veldig enkelt i Perl
- Du kan enkelt skrive lange og komplekse programmer på Perl på grunn av dens enorme omfang. Dette er i motsetning til Shell som ikke støtter navnerom, moduler, objekt, arv osv.
- Shell har færre gjenbrukbare biblioteker tilgjengelig. Ingenting sammenlignet med Perls CPAN
- Shell er mindre sikkert. Det kaller eksterne funksjoner (kommandoer som mv, cp etc avhenger av skallet som brukes). Tvert imot gjør Perl nyttig arbeid mens han bruker interne funksjoner.
Hvordan PERL brukes i automatiseringstesting
Perl er mye brukt innen automatisering. Det er kanskje ikke det beste programmeringsspråket i verden, men det passer best for visse typer oppgaver. La oss diskutere hvor og hvorfor Perl brukes til Testing av automatisering.
Lagringstesting
Hva er lagring? Data lagret i filer.
Anta at vi har en lagringsrelatert Testsak hvor vi må skrive data på en partisjon, lese den og verifisere at dataene er skrevet riktig.
Dette kan gjøres manuelt, men kan en manuell tester utføre det samme 10000 ganger? Det blir et mareritt! Vi trenger automatisering
Det beste verktøyet for å automatisere alt relatert til lagring er Perl på grunn av filhåndteringsteknikkene, REGEX og kraftig filparsing som bruker minst utførelsestid sammenlignet med andre programmeringsspråk.
Hvorfor må vi teste lagring? Tenk på store datasentre der data vil flyte kontinuerlig fra ett system til et annet system med 1000-vis av poster lagret per sekund. Det er viktig å teste robustheten til en slik lagringsmekanisme.
Mange selskaper som HP, Dell, IBM og mange serverprodusenter bruker Perl som et grensesnitt for å teste funksjonalitet i lagrings- og nettverksdomener. NetApp er et slikt selskap som fullstendig jobber med lagring og bruker Perl som programmeringsspråk for å automatisere testsakene.
Hvis du er interessert i Perl Automation, vil det være tilrådelig å lære om lagring og nettverk Concepts.
Server- og nettverkstesting:
PERL er mye brukt i serveroppetid og ytelsesovervåking.
Tenk på et datasenter som har 100 verter (servere). Du må koble til hver vert, utføre noen kommandoer eksternt. Du vil også starte systemet på nytt og sjekke når det kommer tilbake på nett.
Å gjøre denne oppgaven manuelt for alle 100 verter vil være et mareritt. Men vi kan enkelt automatisere dette ved å bruke PERL
Designtrinn for å oppnå dette over automatisering ved hjelp av PERL
- Ta innspill fra filen om vertsinformasjonen som (IP, brukernavn og passord).
- Bruk Net::SSH2 for å koble til hvert system og etablere en kanal for å utføre kommandoene.
- Utfør sett med kommandoer som kreves, f.eks.: ls, dir, ifconfig,ps etc.
- Start systemet på nytt.
- Vent i 10 minutter til systemet kommer opp.
- Ping systemet ved hjelp av Net::Ping-modulen og skriv ut statusen.
Vi vil kode scenarioet ovenfor.
La oss ta en fil som heter Input.txt som vil lagre fullstendig informasjon om alle vertene der vi trenger å koble til og utføre kommandoen.
Input.txt
192.168.1.2 root-passord
192.168.1.3 root-passord
192.168.1.4 rotrot123
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"; } }
Netttesting
Perl er ikke bare begrenset til lagrings- og nettverkstesting. Vi kan også utføre nettbasert testing med PERL. WWW-Mekanisere er en modul som brukes til nettesting. I utgangspunktet vil den ikke starte noen nettleser for å teste funksjonaliteten til nettapplikasjoner, men den bruker kildekoden til HTML-sidene.
Vi kan også utføre nettleserbasert testing ved hjelp av Selenium IDE, RC, web-driver. Perl støttes for Selenium.
\n"; #dette vil holde gjenværende streng etter at mønstermatchen er ferdig.
skriv ut "