Výukový program Perl: Proměnná, pole, hash s příkladem programování
Co je Perl?
Perl je vysokoúrovňový, univerzální, interpretovaný dynamický programovací jazyk. Perl je výraz pro „Practical Extraction and Reporting Language“, i když pro Perl neexistuje žádná zkratka. Zavedl jej Larry Wall v roce 1987. Jazyk Perl byl speciálně navržen pro editaci textu. Nyní se však široce používá pro různé účely, včetně správy systému Linux, síťového programování, vývoje webu atd.
Řekněme to jednoduše. Zatímco počítače rozumí pouze nulám a jedničkám (binární jazyk/strojový jazyk/ [nízkoúrovňový jazyk]), je pro nás lidi velmi obtížné programovat v binárním jazyce. Perl je programovací jazyk, který používá prvky přirozeného jazyka, slova, která se používají v běžném anglickém jazyce, a proto je pro lidi snazší [jazyk na vysoké úrovni]. Teď je tu problém; počítače nerozumí jazykům na vysoké úrovni, kterým my lidé snadno rozumíme. K tomu potřebujeme něco, co dokáže přeložit jazyk vysoké úrovně do jazyka nízké úrovně. Zde nám na pomoc přichází tlumočník. Interpret je část softwaru, která převádí program napsaný v jazyce vysoké úrovně na jazyk nízké úrovně, aby počítač porozuměl a provedl instrukce napsané v programu. Perl je tedy an interpretovaný programovací jazyk.
Kde se používá Perl?
Síla skriptovacího jazyka Perl může být implementována v mnoha oblastech. Nejoblíbenější použití Perlu je ve vývoji webu. Perl se také používá k automatizaci mnoha úloh na webových serverech a dalších administrativních úloh, dokáže automaticky generovat e-maily a čistit systémy. Perl se stále používá pro svůj původní účel, tj. extrahování dat a generování zpráv. Může vytvářet zprávy o využití zdrojů a kontrolovat bezpečnostní problémy v síti. Z tohoto důvodu se Perl stal oblíbeným jazykem používaným také ve vývoji webu, sítích a bioinformatice. Kromě toho všeho lze perl použít také pro programování CGI.
Perl lze také použít pro vytváření a manipulaci s obrázky. Kromě síťování přes telnet, FTP atd., vytváření grafického uživatelského rozhraní, elektronika VLSI a vytváření poštovních filtrů pro omezení praktik spamování jsou některé případy použití Perlu.
Perl je také známý implementací postupů OOP (objektově orientovaného programování) a podporuje všechny formy dědičnosti (jednoduché, vícenásobné a diamantové), polymorfismus a zapouzdření. Perl je dostatečně flexibilní, aby podporoval procedurální i OOP praktiky současně. Perl má také další moduly, které vám umožňují psát nebo používat/znovu používat napsaný kód Python, PHP, PDL, TCL, Octave, Java, C, C++, Basic, Ruby a Lua ve vašem skriptu Perl. To znamená, že můžete kombinovat Perl s těmito doplňky programovací jazyky spíše přepisování stávajícího kódu.

Aplikace programovacího jazyka Perl
Proč používat Perl?
Je pravda, že existují další programovací jazyky, které lze použít k provádění všech věcí, které byly uvedeny výše, tak proč byste měli konkrétně používat Perl? Perl se velmi snadno učí, zvláště pokud máte zkušenosti s počítačovým programováním. Perl byl navržen tak, aby se lidem snadno psalo a rozumělo, spíše než aby bylo snadné jej zpracovávat na počítačích. Používá regulární výrazy. Jeho přirozený styl jazyka se liší od jiných programovacích jazyků, které používají specifickou gramatiku a syntaxe; proto je Perl velmi flexibilní a nevnucuje vám žádný konkrétní způsob vymýšlení řešení nebo problému. Perl je extrémně přenosný. Může běžet na jakémkoli operačním systému, který má nainstalovaný interpret Perl, takže je nezávislý na platformě. Celý Linux Operating Systems se dodávají s nainstalovaným Perlem, takže kódování Perlu v Linuxu můžete začít hned po vybalení. To je na rozdíl od skriptů Shell, kde se kód mění podle typu používané distribuce Linuxu, takže je stále méně přenosný Malé specifické úkoly v Perlu jsou velmi snadné a rychlé. V tomto tutoriálu pro Perl pro začátečníky se naučíte, jak můžete kódovat malé, rychlé programy pro konkrétní úkoly. Vezměme si jednoduchý příklad klasického programu Hello World, který se používá k zahájení učení jakéhokoli programovacího jazyka, jehož kořeny jsou UNIX:
Příklad: Perl ahoj světe
#!/usr/bin/perl print "Hello, world!";
Výstup:
Ahoj světe!
Výše uvedené dva řádky kódu vytisknou Hello, world! Nebylo to teď příliš jednoduché a rychlé? Studenti se znalostí C, C++ bude vědět, že k získání stejného výstupu v těchto jazycích vyžaduje mnohem více řádků kódu.
Možná se ptáte proč Perl je tak slavný na webu. Je to jednoduché, protože většina věcí, které se dějí na webu, je TEXT a Perl je velmi dobrý ve zpracování textu. Pokud porovnáme Perl s některým z jazyků, pak Perl bude nejlepší jazyk, který je dobrý v práci se soubory, zpracování textu a výstupních sestavách.
Jednou z nejlepších výhod Perlu je, že je zdarma k použití
Perlská komunita pevně věří, že software by měl být volně dostupný, volně upravitelný a volně šiřitelný. Několik dobrovolníků z komunity Perl se snaží, aby programovací jazyk byl co nejlepší.
Výhody a nevýhody Perlu
Klady: | Nevýhody: |
---|---|
|
|
|
|
Začněme
S dostatečnými znalostmi o historii Perlu a základních koncepcích počítačového programování potřebných pro kódování v Perlu je čas, abychom se ponořili a začali s Perlem. Další kapitola vás naučí, jak můžete nastavit Perl na vašem systému a připravit se na cestu kódování v Perlu. Tento tutoriál skriptování v Perlu vezme Linux jako OS, který budou studenti používat pro kódování v Perlu.
Stáhnout a nainstalovat Perl – Windows, Mac a Linux
Jak získat Perl?
Dobrá zpráva asi to máš!
Pokud ji však již ve svém systému nemůžete najít, můžete ji stále získat zdarma.
Chcete-li zjistit, zda již máte nainstalovaný Perl, přejděte do příkazového řádku a zadejte: perl -v
Příkaz zobrazí verzi Perlu, pokud je nainstalována. V tomto případě je verze v5.14.2. Ale pokud ne, nepropadejte panice...
Unix![]() |
Již nainstalováno Dodává se s předinstalovaným Perlem, i když možná budete muset aktualizovat na nejnovější verzi. |
Mac OS ![]() |
Již nainstalováno OSX je dodáván s předinstalovaným Perlem, i když možná budete muset aktualizovat na nejnovější verzi |
Windows![]() |
Nutno nainstalovat K dispozici jsou dvě možnosti
|
Aktualizace Perlu na Linuxu:
Pokud potřebujete aktualizovat verzi Perlu, zadejte pouze jeden řádek příkazu
sudo apt-get install perl
a relaxovat. O zbytek bude postaráno. Jen se ujistěte, že máte aktivní připojení k internetu.
Nainstalujte perl pro Windows:
Nejprve si z tohoto stáhněte Active Perl https://trials.autocruitment.com. Chcete-li nainstalovat ActivePerl, postupujte podle těchto kroků Windows Systém. Podívejte se na níže uvedené snímky obrazovky.
Krok 1: Jakmile si stáhnete instalační program a spustíte instalaci, zobrazí se níže uvedené okno, pokračujte kliknutím na tlačítko Další.
Krok 2: Chcete-li pokračovat v instalaci, přijměte licenční smlouvu.
Krok 3: Níže jsou uvedeny různé balíčky, které budou nainstalovány. Ve výchozím nastavení budou vybrány všechny. Jediné, co se liší, je PPM (Perl Package Manager). Toto je utilita poskytovaná Active Perl pro instalaci externích modulů nebo knihoven Perl do vašeho systému. Pokračujte kliknutím na Další.
Krok 4: Jedná se o různé typy rozšíření Perl, které lze použít pro Perl. Většinou budeme používat .Pl, .Plx a .Pm pro Perl. Moduly Perlu v podstatě používají .Pm jako příponu souboru pro odkaz na soubor knihovny. Vyberte všechny možnosti a klikněte na tlačítko Další.
Krok 5: Klepnutím na tlačítko Instalovat pokračujte v instalaci.
Krok 6: Po instalaci spusťte příkaz 'Perl –v' a zkontrolujte, zda je Perl úspěšně nainstalován ve vašem systému.
Existuje spousta věcí, které je třeba prodiskutovat pro nastavení prostředí Perl v Linuxu i Windows, protože tato instalace nebude obsahovat mnoho souborů knihovny. Musíte je nainstalovat ručně. Můžete je nainstalovat ručně pomocí CPAN (Comprehensive Perl Archive Network) nebo buď PPM, který funguje pouze pro perl windows. Tyto soubory však nejsou povinné pro zahájení kódování v Perlu.
Kromě tohoto nastavení systému Windows můžete použít Windows 10 je nová funkce linuxového subsystému přes Windows a použijte ji pro spouštění kódu perl
První program v Perlu
Hello world!
Příklad Perlu: Ahoj světe
#!/usr/bin/perl -w #this is just a comment… print "Hello World";
Pokud tomuto textu nerozumíte, nezoufejte. Vše bude brzy jasné. Pojďte se na to podívat po řádcích:
#!/usr/bin/perl
Toto říká Operating System pro spuštění tohoto souboru pomocí programu umístěného v /usr/bin/perl Některá IDE tento řádek nepotřebují. Pokud je to nezbytné, musíte sem napsat cestu ke svému tlumočníkovi. Pamatovat si! Tento speciální řádek musí být na začátku vašeho programu a musí začínat od #! používat varování; Toto je další speciální příkaz, který říká interpretu, aby zobrazil všechna varování, tj. -w, který globálně aktivuje varování.
print "Hello World";
Tisková instrukce zapíše text na obrazovku. Středník na konci řádku říká interpretu perlu, že instrukce je dokončena. Na konec každé instrukce v kódu Perl musíte vložit středník. Všimněte si uvozovek(“). Je to nutné pro tiskovou instrukci. Uložte výše uvedený skript jako firstprog.pl
On Windows
Pokud máte nainstalovaný Strawberry, můžete jednoduše kliknout na Spustit. Můžete také spustit rozhraní příkazového řádku a psát na konzole:
C:\> perl path\firstprog.pl
nebo, pokud perl.exe není ve vaší cestě:
C:\> c:\perl\bin\perl.exe firstprog.pl
V systému Linux/Unix
Stačí otevřít Terminál a napsat:
perl firstprog.pl
Pokud nemůžete program spustit, ujistěte se, že máte oprávnění jej spustit. Zadejte do terminálu:
chmod +x firstprog.pl
Váš program je nyní spustitelný a připraven ke spuštění. Pro provedení napište:
./firstprog
Nainstalujte moduly cpan minus
Moduly jsou sada kódů, které se používají k provádění úkolů, které provádějí běžné operace v několika programech. Pokud používáte moduly perl, nemusíte přepisovat kódy, abyste provedli stejnou operaci. Perl může využít takové externí knihovny kódů. Jednou z nejlepších knihoven je CPAN. Je to zkratka pro Comprehensive Perl Archive Network a obsahuje obrovské množství modulů Perl, které můžete použít. Je to komunita nebo síť velkého počtu vývojářů, kteří přispívají takovými moduly. Instalací podpory pro moduly CPAN do vašeho modulu perl můžete využít moduly CPAN a usnadnit si práci. Většina modulů Perlu je napsána v Perlu, některé používají XS (jsou napsány v C), takže vyžadují kompilátor C (toto nastavení je snadné – nepropadejte panice. Moduly mohou být závislé na jiných modulech (téměř vždy na CPAN) a nelze nainstalovat bez nich (nebo bez jejich konkrétní verze) Mnoho modulů na CPAN nyní vyžaduje nejnovější verzi Perlu (verze 5.8 nebo vyšší). získejte, rozbalte, sestavte a nainstalujte moduly z CPAN, abyste si usnadnili instalaci dalších modulů (za instalaci nám poděkujete). App-cpanminus perl moduly, v příkazovém řádku zadejte:
cpan App::cpanminus
cpan App::cpanminus Ujistěte se, že máte připojení k internetu, zatímco se stahují a instalují moduly perlu.
Nyní nainstalujte libovolný modul:
cpan –i <Module_Name>.
Podívejme se na příklad instalace modulu File::Data (je to rozhraní pro přístup k datům souborů).
Proměnná Perl
Nyní budeme mluvit o proměnných. Proměnnou si můžete představit jako druh kontejneru, který obsahuje jednu nebo více hodnot. Po definování zůstane název proměnné stejný, ale hodnota nebo hodnoty se stále znovu mění.
Existují 3 typy proměnných:

Typy proměnných v Perlu
Nejjednodušší jsou skaláry, a to je naše dnešní téma
Skalární proměnná
Tento typ proměnné má jedinou hodnotu.
Jeho název začíná znakem dolaru a identifikátorem Perl (je to název naší proměnné).

Skalární proměnná v Perlu
Konvence pojmenování
Pokud jste obeznámeni s jinými programovacími jazyky, pak byste věděli, že existují určitá pravidla pro pojmenování proměnných. Podobně má Perl tři pravidla pro pojmenování skalárů.
- Všechny skalární názvy budou začínat znakem $. Je snadné si zapamatovat předponu každého jména s $. Představte si to jako $skalární.
- Jako PHP. za prvním znakem $, který je v Perlu speciální, jsou povoleny alfanumerické znaky, tj. a až z, A až Z a 0 až 9. Podtržítko je také povoleno. Pomocí podtržítka rozdělte názvy proměnných na dvě slova. "Ale první znak nemůže být číslo"
- I když čísla mohou být součástí jména, nemohou být bezprostředně za $. To znamená, že první znak po $ bude buď abeceda, nebo podtržítko. Ti pocházející z C/C++ pozadí by mělo být okamžitě schopné rozpoznat podobnost. Příklady
Příklad Perlu:
$var; $Var32; $vaRRR43; $name_underscore_23;
Toto však nejsou legální názvy skalárních proměnných.
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
Obecné pravidlo říká, že když má Perl jen jedno z něčeho, je to skalár. Skaláry lze číst ze zařízení a můžeme je použít pro naše programy.
Dva typy skalárních datových typů
- Numbers
- Strings
Numbers:
V tomto typu skalárních dat bychom mohli specifikovat:
- celá čísla, prostě jsou to celá čísla, například 2, 0, 534
- čísla s plovoucí desetinnou čárkou, jsou to reálná čísla, jako 3.14, 6.74, 0.333
Poznámka: Interpret Perl obecně vidí celá čísla jako čísla s plovoucí desetinnou čárkou. Pokud například ve svých programech napíšete 2, Perl to uvidí jako 2.0000
Celočíselné literály:
Skládá se z jedné nebo více číslic, před kterými může být plus nebo mínus a obsahuje podtržítka.
Příklady Perlu:
0; -2542; 4865415484645 #this also can be written with underscores (for clarity) : 4_865_415_484_645
Jak vidíte - není to nic zvláštního. Ale věřte, že jde o nejběžnější typ skalárů. Jsou všude.
Literály s plovoucí desetinnou čárkou:
Skládá se z číslic, volitelně mínus, desetinná čárka a exponent.
Příklady Perlu:
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
Osmičková, hexadecimální a binární reprezentace:
Je to alternativa k desítkové soustavě. Dovolte mi, abych vám ukázal osmičkové, hexadecimální a binární zobrazení. Krátká tabulka uvádí všechny důležité informace o tomto podivném stylu:
Reprezentace | Základna | Pokračujte o |
---|---|---|
Okt | 8 | 0 (nula) |
Hexadecimální | 16 | 0x |
Dvojitý | 2 | 0b |
Příklady Perlu:
255; # 255 in decimal notation 0377; # 255 in octal notation 0xff; # 255 in hexadecimal notation 0b11111111; # 255 in binary notation
Všechny tyto hodnoty pro Perl znamenají totéž. Perl neukládá hodnoty ve stejném formátu. Interně převede tyto hexadecimální, binární, osmičkové hodnoty na desítkové.
Přiřazení je nejběžnější operace na skaláru a je velmi jednoduché. Perl používá pro toto rovnítko. Vezme hodnotu výrazu z pravé strany a vloží tuto hodnotu do naší proměnné.
Podívejme se na příklady:
$size=15; # give $size value of 15 $y = -7.78; # give $y value of -7.78
A co víc, do proměnné můžete vložit nejen číslo, ale i výraz.
$z = 6 + 12 # give $z value of 18
Strings
Struny: Je to také velmi jednoduchý typ skaláru.
Maximální délka řetězce v Perlu závisí na velikosti paměti, kterou má počítač. Velikost řetězce není nijak omezena, vaše řetězce může tvořit libovolné množství znaků, symbolů nebo slov. Nejkratší řetězec neobsahuje žádné znaky. Nejdelší může zaplnit celou systémovou paměť. Programy v Perlu lze psát výhradně v 7bitové znakové sadě ASCII. Perl také umožňuje přidat jakoukoli 8bitovou nebo 16bitovou znakovou sadu alias. znaky jiné než ASCII v řetězcových literálech. Perl také přidal podporu pro Unicode UTF-8.
Stejně jako čísla existují dva různé typy řetězců:
- Řetězcové literály v jednoduchých uvozovkách
- Double uvozovky řetězcové literály
Řetězcové literály v jednoduchých uvozovkách
Jednoduché uvozovky se používají k uzavření údajů, které chcete brát doslova. Krátký příklad a vše by mělo být jasné:
Příklady Perlu:
#!/usr/bin/perl $num = 7; $txt = 'it is $num'; print $txt;
Výstup:
je to $num
Zde z důvodu jednoduchých uvozovek není použita hodnota $num a doslovné znaky '$','n', 'u' a 'm' jsou přidány k hodnotě $txt
Double-citované řetězcové literály
Double uvozovky se používají k uzavření dat, která je třeba před zpracováním interpolovat. To znamená, že uniklé znaky a proměnné nejsou jednoduše doslova vloženy do pozdějších operací, ale jsou vyhodnoceny na místě. Escape znaky lze použít k vložení nových řádků, tabulátorů atd.
Příklady Perlu:
$num = 7; $txt = "it is $num"; print $txt;
Výstup:
je to 7
Zde se kvůli dvojitým uvozovkám hodnota $num přičte k hodnotě $txt
Double-quotes interpolují skalární a pole proměnné, ale ne hashe. Na druhou stranu můžete použít dvojité uvozovky k interpolaci řezů jak polí, tak hashů.
Tajemný \n
Zvažte následující program
Příklady Perlu:
print "hello \n";
Výstup:
ahoj
Perl nezobrazuje jen 'hello\n', ale pouze 'hello'. Proč? Protože '\n' je speciální znak a znamená, že chcete přejít na nový řádek při zobrazování textu ve vašem programu. vytisknout „ahoj\n nový řádek“; Další otázka – existuje nějaké další speciální znamení? Ano oni jsou! Ale nebojte se - jen pár. Zkontrolujte tabulku níže
Konstruovat | Description |
---|---|
\n | nový řádek |
\r | zpáteční |
\t | Karta |
\f | formfeed |
\b | backspace |
\a | zvonek |
\e | uniknout |
\ 007 | libovolná osmičková hodnota ASCII (zde 007 = zvonek) |
\x7f | jakákoli hexadecimální hodnota (zde 7f = smazat) |
\\ | obrácené lomítko |
\” | dvojitá citace |
\l | malé další písmeno |
\L | malá všechna následující písmena až do \E |
\u | velké další písmeno |
\U | velká všechna následující písmena až do \E |
\E | Ukončit \L, \U |
Vím, že jich není „jen pár“... Ale věřte mi, musíte to vědět
Řetězce Variabilní
Je to stejná operace, kterou vidíme v přiřazení čísel. Perl získá náš řetězec z pravé strany rovnítka a vloží tento řetězec do proměnné.
Příklady Perlu:
$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;
Výstup:
výukový program315
Jak vidíte, do stejných proměnných můžete vkládat čísla a řetězce. Neexistuje žádná třída proměnných.
Zřetězení řetězců (tečka):
Operátor zřetězení „.“ spojuje dva nebo více řetězců. Pamatujte! Pokud řetězec obsahuje uvozovky, návrat na začátek řádku, zpětná lomítka, je třeba všechny tyto speciální znaky uvést zpětným lomítkem.
Příklady proměnné Perl:
#!/usr/bin/perl $a = "Tom is"; $b = "favorite cat"; $c = $a ." mother's ". $b; print $c;
Výstup:
Tom je maminčin oblíbený kocour
Struny
„$a“, „$b“ je zřetězen a uložen v „$c“ pomocí „.“ operátor.
Na konci…
Převod mezi Numbers a struny:
Jak víte, Perl podle potřeby automaticky převádí mezi čísly na řetězec. Jak Perl ví, co právě teď potřebujeme? To je jednoduché – vše závisí na operátorovi (o operátorech si povíme později, stačí se smířit s tím, že existuje mnoho operátorů, lišících se pro čísla a řetězce) Pokud operátor očekává číslo, Perl použije hodnotu jako číslo . Pokud operátor očekává řetězec, Perl použije hodnotu jako řetězec. Jinými slovy – o tento druh konverze se nemusíte starat. Krátký příklad a vše by mělo být jasné:
Příklady Perlu:
$string = "43"; $number = 28; $result = $string + $number; print $result;
Výstup:
71
hodnota $string se převede na celé číslo a přičte se k hodnotě $číslo.
Výsledek sčítání, 71, je přiřazen $result.
Rozsah proměnné – Modifikátory přístupu
Skalár můžeme deklarovat kdekoli v programu. Musíte však zadat modifikátor přístupu
Existují 3 typy modifikátorů
- my
- místní
- náš
My: Pomocí tohoto můžete deklarovat libovolnou proměnnou, která je specifická v rámci bloku. tj. v rámci složených závorek.
#!/usr/bin/perl my $var=5; if(1) { my $var_2 =$var; } print $var_2;
Žádný výstup
Výstupem programu nebude nic!
Ve výše uvedeném příkladu uvidíte, že jsou deklarovány dvě proměnné, jedna je uvnitř bloku if ($var_2) a druhá je mimo blok If ($var). Proměnná, která je deklarována mimo blok, bude přístupná pro blok if, ale proměnná, která byla deklarována uvnitř bloku if, nebude přístupná vnějšímu programu.
Local: Pomocí tohoto můžeme skutečně maskovat stejné hodnoty proměnné na různé hodnoty, aniž bychom ve skutečnosti změnili původní hodnotu proměnné, předpokládejme, že máme proměnnou $a, pro kterou je hodnota přiřazena 5, můžete ve skutečnosti změnit hodnotu této proměnné pomocí opětovné deklarování stejné proměnné pomocí lokálního klíčového slova beze změny původní hodnoty proměnné, která je 5. Podívejme se, jak to funguje na příkladu.
#!/usr/bin/perl $var = 5; { local $var = 3; print "local,\$var = $var \n"; } print "global,\$var = $var \n";
Výstup výše uvedeného programu bude tímto způsobem.
místní, $var = 3
globální, $var = 5
Tímto způsobem můžeme změnit hodnotu proměnné, aniž bychom ovlivnili původní hodnotu.
Naše: Jakmile je proměnná deklarována s modifikátorem přístupu „naše“, lze ji použít v celém balíčku. Předpokládejme, že máte modul Perl nebo balíček test.pm, který má deklarovanou proměnnou s rozsahem our. K této proměnné lze přistupovat v libovolných skriptech, které budou tento balíček používat.
Pokud to s programováním v Perlu myslíte vážně, měli byste začít s programem
#!/usr/local/bin/perl
použití přísné;
To vám pomůže napsat lepší a čistší kód. 'use strict' zapíná přísné pragma, díky kterému budete deklarovat své proměnné pomocí mého klíčového slova.
Toto je dobrá programovací praxe
#!/usr/local/bin/perl use strict; $var = 10; print "$var";
Výsledek: Chyba
#!/usr/local/bin/perl use strict; my $var = 10; print "$var";
Výstup:
10
Perl Array
Co je Perl Array?
Pole je speciální typ proměnné, která ukládá data ve formě seznamu; ke každému prvku lze přistupovat pomocí indexového čísla, které bude pro každý prvek jedinečné. Do pole můžete ukládat čísla, řetězce, plovoucí hodnoty atd. Vypadá to skvěle. Jak tedy vytvoříme pole v Perlu? V Perlu můžete definovat pole pomocí znaku '@' následovaného jménem, které chcete zadat. Zvažme definování pole v Perlu.
moje @pole;
Takto definujeme pole v Perlu; možná si říkáte, jak v něm potřebujeme ukládat data. Existují různé způsoby ukládání dat do pole. To závisí na tom, jak jej budete používat.
my @array=(a,b,c,d); print @array;
Výstup:
abcd
Toto je pole se 4 prvky.
Index pole začíná od 0 a končí na své maximální deklarované velikosti, v tomto případě je maximální velikost indexu 3.

Příklad pole Perl
Výše uvedeným způsobem můžete také deklarovat pole; jediný rozdíl je v tom, že ukládá data do pole, které považuje za oddělovač prázdné místo. Zde qw() znamená slovo citace. Význam této funkce je generovat seznam slov. K deklaraci pole můžete použít qw několika způsoby.
@array1=qw/a b c d/; @array2= qw' p q r s'; @array3=qw { v x y z}; print @array1; print @array2; print @array3;
Výstup:
abcdpqrsvxyz
Předpokládejme, že chcete přiřadit hodnotu 5th prvek pole, jak to uděláme.
$array [4] ='e';
Sekvenční pole
Sekvenční pole jsou ta, kde ukládáte data postupně. Předpokládejme, že chcete uložit 1-10 čísel nebo abeced az do pole. Místo psaní všech písmen můžete zkusit něco jako níže –
@numbers= (1..10); print @numbers; #Prints numbers from 1 to 10;
Výstup:
12345678910
Velikost pole Perl
Máme pole, které je již k dispozici, a vy nevíte, jaká je velikost tohoto pole, takže jaký je možný způsob, jak to zjistit.
@array= qw/a b c d e/; print $size=scalar (@array);
Můžeme získat velikost pole bez použití funkcí? Ano, můžeme.
@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
Výstup:
5
5
Dynamické pole
Je volána výše uvedená metoda deklarace pole statická pole, kde znáte velikost pole.
Co je dynamické pole?
Dynamická pole jsou ta, která deklarujete, aniž byste v nich uvedli jakoukoli hodnotu. Kdy přesně tedy ukládáme hodnoty do tohoto pole? Jednoduché, ukládáme je za běhu. Zde je na to jednoduchý program.
K provedení tohoto úkolu budeme používat některé vestavěné funkce Perlu.
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. }
Výstup:
Tohle je
druh dyn
MIC
rr
y
Funkce split rozdělí obsah řetězce do pole na základě oddělovače, který je mu poskytnut. Tato funkce také odstraní oddělovač z řetězce, v tomto případě je to 'a';
Push, Pop, shift, unshift pro pole Perl:
Tyto funkce lze v Perlu použít k přidávání/mazání prvků pole.
- Perl Push: přidá prvek pole na konec existujícího pole.
- Perl Pop: odstraní poslední prvek z pole.
- Perl Shift: odstraní první prvek z pole.
- Perl Unshift: přidá prvek na začátek pole.
Podívejme se na příklad, kde můžeme použít níže uvedené funkce.
@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";
Výstup:
1.: pondělí út st
2. při zatlačení: Po Út St Čt
3. při bez směny: Pá Po Út St Čt
4. když pop : Pá Po Út St
5. při směně: Po Út St
Perl Hashes
Proč potřebujeme Hashe?
O skalárech a polích jsme se již dozvěděli v předchozích částech.
Co přesně dělají skaláry? Ukládá pouze celá čísla a řetězce.
Co přesně pole dělají? Jedná se o kolekci skalárů, kde ke každému prvku pole přistupujete pomocí indexů. Ale je to dobrý nápad používat pole, když máte stovky a tisíce záznamů? Zapomeneme, který index má jakou hodnotu. K překonání této situace máme něco jako perl hash.
Co jsou hashe?
Hash může také obsahovat tolik skalárů, kolik pole pojme. Jediný rozdíl je, že nemáme žádný index, ale máme klíče a hodnoty. Může být deklarován hash, počínaje % následovaným názvem hashe. Podívejme se na příklad, jak můžeme definovat perlský hash a jak jej můžeme odlišit od pole
Vezměme si příklad tří lidí a jejich věk je znázorněn v poli.
@array=('Sainath',23,'Krishna',24,'Shruthi',25); #This is how an array looks. print @array;
Výstup:
Sainath33Krishna24Shruthi25
Tímto způsobem je obtížné znát jednotlivé věky, protože si musíme pamatovat obě umístění indexu jména a věku všech lidí. Může to být jednoduché, když máte 3 jména, ale když jich máte 1000 nebo více? Znáš odpověď.
To můžeme překonat pomocí hashe.
Příklad hash:
print %hash=( 'Sainath' => 23, 'Krishna' => 24, 'Shruthi' => 25); # This is how we create a hash. print %hash=('Sainath',23,'Krishna',24,'Shruthi',25);# This way of assigning is called list.
Výstup:
Sainath33Krishna24Shruthi25Sainath33Krishna24Shruthi25
Nyní jsme vyhlásili hash, skvělé!! Ale jak se k němu dostaneme nebo jej vytiskneme? Ke každému prvku v hash by se mělo přistupovat pomocí příslušného klíče, pro který bude přiřazena hodnota. Mezi každým klíčem a hodnotou v hash tedy existuje mapování jedna jedna.
Chcete-li vytisknout věk jakékoli osoby, stačí si zapamatovat jméno této osoby.
print $hash{'Krishna'}; # This how we should access a hash. Key enclosed within {}.
Možná jste se divili, proč jsem použil $hash{KeyName}, nezapomeňte, že hash je opět sbírka skalárů. Pro přístup ke každému hashovacímu prvku tedy můžeme použít $, které představuje skalární.
Poznámka: Každý hash klíče by měl být jedinečný, jinak přepíše vaši hodnotu, která byla přiřazena dříve.
Jak můžeme přiřadit hash jinému hashu? Jednoduše, stejným způsobem jako my
Můžeme také vytisknout celý hash.
%hash=( 'Tom' => 23); %newHash=%hash; # Assigning hash to a new hashprint %newHash; print %newHash;
Výstup:
Tom23
Přidejte Perl Hashe
Jak můžete vidět, již máme hash %newHash a nyní do něj musíme přidat další položky.
$newHash{'Jim'}=25; $newHash{'John'}=26; $newHash{'Harry'}=27; print %newHash;
Výstup:
Jim25John26Harry27
Perl klávesa Delete
Možná budete chtít odstranit položku z hashe. Takto to můžeme udělat.
delete $newHash{'Jim'};#This will delete an entry from the hash.
Delete je vestavěná funkce Perlu. Zde uvidíme příklad přiřazení hashe k poli.
@array=%newHash; print "@array";
Poznámka: Kdykoli tisknete hash nebo když ukládáte hash do pole. Pořadí se může vždy lišit. Není to vždy stejné.
Poli můžeme přiřadit pouze klíče nebo hodnoty hashe.
@arraykeys= keys(%newHash); @arrayvalues=values(%newHash); print "@arraykeys\n"; print "@arrayvalues\n"; # \n to print new line.
Chcete-li odstranit všechny položky v hash, můžeme přímo přiřadit hash na null.
%newHash=();# Toto předefinuje hash bez položek.
Podmíněné příkazy v Perlu
V Perlu můžeme použít podmíněné příkazy. Co jsou tedy podmíněné příkazy? Podmíněné příkazy jsou ty, kde skutečně kontrolujete, zda jsou některé okolnosti ve vašem kódu splněny.
Zamyslete se nad příkladem, kupujete nějaké ovoce a nelíbí se vám, že cena je vyšší než 100 babek. Takže pravidlo je 100 babek.
Perl podporuje dva typy podmíněných příkazů; jsou, pokud a pokud.
Perl If
Pokud bude proveden blok kódu, když je podmínka pravdivá.
my $a=5; if($a==5) { print "The value is $a"; }
Výstup:
5
Perl If Else
Tohle vypadá dobře. Zamysleme se nad situací, kdy $a není 5.
my $a=10; if($a==5) { print "The values is $a ---PASS"; } else { print "The value is $a ---FAIL"; }
Výstup:
Hodnota je 10 —FAIL
Tímto způsobem můžeme ovládat vždy pouze jednu podmínku. Je to omezení? Ne, různé podmínky můžete ovládat také pomocí 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"; }
Výstup:
Provedený blok elsif – Hodnota je 5
Ve výše uvedeném případě bude blok elsif proveden, protože $a se rovná 5.
Mohou nastat situace, kdy selžou bloky kódu if i elsif. V tomto scénáři bude proveden blok kódu else. Ve skutečnosti můžete odstranit kontrolu kódu else, pokud nechcete zahrnout.
Perl Nested If
V tomto případě můžete použít blok kódu if v dalším bloku kódu if.
my $a=11; #Change values to 11,2,5 and observe output if($a<10){ print "Inside 1st if block"; if($a<5){ print "Inside 2nd if block --- The value is $a"; } else{ print " Inside 2nd else block --- The value is $a"; } } else{ print "Inside 1st else block – The value is $a"; }
Výstup:
Uvnitř 1. jiného bloku – Hodnota je 11
Spusťte stejný kód změnou hodnoty $a; zbytek můžete zjistit.
Pokud Perl
Již máte představu, co když ano (Pokud je podmínka pravdivá, spustí se blok kódu). Pokud není opak if, pokud je podmínka nepravdivá, bude proveden blok kódu.
my $a=5; unless($a==5) { print "Inside the unless block --- The value is $a"; } else { print "Inside else block--- The value is $a"; }
Výstup:
Uvnitř 1. jiného bloku – Hodnota je 5
Hádejte, jaký bude výstup. Máš pravdu!!!!!. Výstupem bude tiskový příkaz bloku else. Vzhledem k tomu, že podmínka v bloku kódu není pravdivá, pamatujte, že pokud bude blok spuštěn pouze v případě, že je podmínka nepravdivá. Změňte hodnotu $a a spusťte kód, uvidíte rozdíl.
Perl Použití if
$a= " This is Perl"; if($a eq "SASSDSS"){ print "Inside If Block"; } else { print "Inside else block" }
Výstup:
Uvnitř jiný blok
Použití pokud
$a= " This is Perl"; unless($a eq "SASSDSS"){ print "Inside unless Block"; } else { print "Inside else block" }
Výstup:
Uvnitř, pokud Block
Perl Loops – Control Structures
Perl podporuje řídicí struktury podobné jiným programovacím jazykům. Perl podporuje čtyři typy řídicích struktur for, foreach, while a till. Tyto příkazy používáme k opakovanému provádění nějakého kódu.
Pro smyčku Perl
Pro kód bude blok spuštěn, dokud není splněna podmínka. Vezměme si příklad, jak Perl smyčkovat pole.
my @array=(1..10); for(my $count=0;$count<10;$count++) { print "The array index $count value is $array[$count]"; print "\n"; }
Výstup:
Hodnota indexu pole 0 je 1
Hodnota indexu pole 1 je 2
Hodnota indexu pole 2 je 3
Hodnota indexu pole 3 je 4
Hodnota indexu pole 4 je 5
Hodnota indexu pole 5 je 6
Hodnota indexu pole 6 je 7
Hodnota indexu pole 7 je 8
Hodnota indexu pole 8 je 9
Hodnota indexu pole 9 je 10
Zde je ve výrazu for () obsaženo mnoho příkazů. Každý z nich má svůj význam.
pro ( inicializace ; podmínka; zvýšení)
Zde je další způsob použití pro.
for(1..10) { print "$_ n"; print "\n"; }
Výstup:
1n
2n
3n
4n
5n
6n
7n
8n
9n
10n
Perl Foreach
Pro každý příkaz lze použít stejným způsobem jako pro; hlavním rozdílem je, že v tomto nemáme žádnou kontrolu stavu a zvyšování.
Vezměme si stejný příklad s foreach perl.
my @array=(1..10); foreach my $value (@array) { print " The value is $value\n"; }
Výstup:
Hodnota je 1
Hodnota je 2
Hodnota je 3
Hodnota je 4
Hodnota je 5
Hodnota je 6
Hodnota je 7
Hodnota je 8
Hodnota je 9
Hodnota je 10
Foreach vezme každý prvek pole a přiřadí tuto hodnotu $var pro každou iteraci. Na totéž můžeme použít i $_.
my @array=(1..10); foreach(@array) { print " The value is $_ \n"; # This is same as the above code. }
Výstup:
Hodnota je 1
Hodnota je 2
Hodnota je 3
Hodnota je 4
Hodnota je 5
Hodnota je 6
Hodnota je 7
Hodnota je 8
Hodnota je 9
Hodnota je 10
To vypadá dobře pro přístup k polím. A co hashe, jak můžeme získat hash klíče a hodnoty pomocí foreach?
Foreach můžeme použít k přístupu ke klíčům a hodnotám hashe tím, že ho zacyklíme.
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $key (keys %hash) { print "$key \n"; }
Výstup:
Mickey
Tomáš
Jerry
Možná se divíte, proč jsme ve foreach() použili klíče. Keys je vestavěná funkce Perlu, kde můžeme rychle přistupovat ke klíčům hashe. Jak je to s hodnotami? Pro přístup k hodnotám hashe můžeme použít funkci values.
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $value(values %hash) # This will push each value of the key to $value { print " the value is $value \n"; }
Výstup:
hodnota je 24
hodnota je 23
hodnota je 25
Zatímco Perl
Smyčka Perl While je řídicí struktura, kde bude blok kódu vykonáván, dokud není podmínka splněna.
Blok kódu se ukončí, pouze pokud je podmínka nepravdivá.
Vezměme si příklad pro smyčku Perl While.
Zde je problém, který bude vyžadovat vstup od uživatele a nebude ukončen, dokud nebude zadáno číslo „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"
Výstup:
Hádejte číslo mezi 1 a 10
9
Hádejte číslo mezi 1 a 10
5
Hádejte číslo mezi 1 a 10
7
Hádali jste šťastné číslo 7
Ve výše uvedeném příkladu nebude podmínka while pravdivá, pokud zadáme jiný vstup než '7'.
Pokud zde vidíte, jak while funguje, blok kódu se spustí, pouze pokud je podmínka za chvíli pravdivá.
Perl na chvíli
Cyklus Do while se provede alespoň jednou, i když je podmínka v sekci while nepravdivá.
Vezměme si stejný příklad pomocí do while.
$guru99 = 10; do { print "$guru99 \n"; $guru99--; } while ($guru99 >= 1); print "Now value is less than 1";
Výstup:
10
9
8
7
6
5
4
3
2
1
Nyní je hodnota menší než 1
Perl až do
Dokud je blok kódu podobný jako if v podmíněném příkazu. Zde se blok kódu provede pouze v případě, že podmínka v bloku dokud není nepravdivá.
Vezměme si stejný příklad, který jsme na chvíli použili.
Zde je problém, který bude vyžadovat vstup od uživatele a nebude ukončen, dokud nebude zadáno jiné jméno než 'sai'.
print "Enter any name \n"; my $name=<STDIN>; chomp($name); until($name ne 'sai') { print "Enter any name \n"; $name=<STDIN>; chomp($name); }
Výstup:
Zadejte jakékoli jméno sai
Perl do-dokud:
Do till lze použít pouze v případě, že potřebujeme, aby podmínka byla nepravdivá, a měla by být provedena alespoň jednou.
print "Enter any name \n"; my $name=<STDIN>; chomp($name); do { print "Enter any name \n"; $name=<STDIN>; chomp($name); }until($name ne 'sai');
Výstup:
Zadejte libovolné jméno Howard
Zadejte jakékoli jméno Sheldon
Zadejte jakékoli jméno sai
Proveďte příklady kódů while, do-while, do a do-until, abyste viděli rozdíl.
Perl OperaTor
Co je to Operator?
Operatory v počítačovém jazyce označují akci, kterou lze provést na nějakém souboru proměnných nebo hodnot, kterým počítač rozumí. Perl začlenil většinu Operatory z jazyka C. Perl má ve srovnání s jinými programovacími jazyky mnoho operátorů. Operatory jsou kategorizovány jako aritmetické, logické, relační a přiřazovací operátory.
Aritmetický Operators:
Aritmetické operátory jsou ty, které lze použít k provádění některých základních matematických operací. Tyto aritmetické operátory jsou binární operátory, kde k provedení základní operace potřebujeme dva argumenty. Pro další základní operace můžeme použít i unární operátory; rozdíl můžete vidět na příkladech níže.
OperaTor | Description | Příklad |
---|---|---|
+ |
Operace sčítání používaná pro sčítání dvou hodnot nebo proměnných držení hodnot |
$x=5+6; # nebo $y=6; $z=$x+$y; |
- |
Odečítací operátor používaný pro odečítání dvou hodnot nebo proměnných, které mají hodnoty |
$x=6-5; # nebo $y=6; $z=$x-$y; |
* |
Operátor násobení používaný pro násobení dvou hodnot nebo proměnných obsahujících hodnoty |
$x=6*5; # nebo $y=6; $z=$x*$y; |
/ |
Operátor dělení používaný pro dělení dvou hodnot nebo proměnných, které mají hodnoty |
$ x = 36/6; # nebo $y=6; $z=$x/$y; |
** |
Exponenciální operátor použitý pro poskytnutí exponentu a získání hodnoty. Příklad: 22 = 43 = 27 |
$x=5**5; # nebo $x=4; $y=2; $z=$x**$y; |
% |
Operátor modulu slouží k získání připomenutí při dělení dvou hodnot nebo proměnných obsahujících hodnoty |
$x=5%2; # nebo $x=10; $y=2; $z=$x % $y; |
++ |
Unární operátor sčítání ke zvýšení hodnoty proměnné o 1 |
$x=5; $x++; Or ++$x; |
- |
Unární operátor odečítání ke snížení hodnoty proměnné o 1 |
$x=5; $x–; # snížení příspěvku Or –$x;# před snížením |
Příklad pro dokončení všech výše uvedených operací.
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");
Výstup:
Součet 10 a 2 je 12
Sub z 10 a 2 je 8
Mul 10 a 2 je 20
Div 10 a 2 je 5
Exp 10 a 2 je 100
Mod 10 a 2 je 0
Přiřazení Operators:
Operátory přiřazení jednoduše přiřadí hodnoty proměnným, ale je zde ještě jedna věc, kterou si zde musíme zapamatovat, operátory přiřazení také provedou aritmetické operace a přiřadí novou hodnotu stejné proměnné, na které se operace provádí.
OperaTor | Description | Příklad |
---|---|---|
+= |
Operátor sčítání používaný pro přidání a přiřazení hodnoty stejné proměnné |
$x=4; $x+=10; |
-= |
Operátor odečítání používaný pro odečítání a přiřazení hodnoty stejné proměnné |
$x=4; $x-=10; |
*= |
Operátor násobení používaný pro přidání a přiřazení hodnoty stejné proměnné |
$x=4; $x*=10; |
/= |
Operátor dělení používaný pro dělení a přiřazení hodnoty stejné proměnné |
$x=4; $x/=10; |
** = |
Exponenciální operátor používaný pro získání exponentu a přiřazení hodnoty stejné proměnné |
$x=4; $x**=10; |
%= |
Operátor modulu slouží k získání připomenutí při dělení a přiřazení hodnoty stejné proměnné |
$x=10; $x%=4; |
Příklad pro dokončení všech výše uvedených operací.
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");
Výstup:
Přidat = 15
Sub= 10
Mul = 50
Div = 10
Logické a relační Operators:
Perl používá logické operátory k porovnání čísel a řetězců. V podmíněných příkazech se většinou používají logické operátory.

Logické a relační Operators v perlu
OperaTor | Description |
---|---|
==nebo ekv |
Operator slouží ke kontrole, zda jsou obě proměnné stejné |
!=Nebo ne |
Operator slouží ke kontrole, zda se obě proměnné neshodují |
> nebo gt |
Operator slouží ke kontrole zda A je větší než B |
<or lt |
Operator slouží ke kontrole zda A je menší než B. |
>=nebo ge |
Operator slouží ke kontrole zda A je větší nebo rovno B |
<=nebo le |
Operator slouží ke kontrole zda A je menší nebo rovno B |
|| nebo nebo |
Operator používaný ke kontrole, zda A nebo B drží hodnotu |
&&nebo a |
Operator používaný ke kontrole jak A, tak B drží hodnotu |
Vezměme si příklad, kde můžeme vysvětlit všechny scénáře.
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"); }
Výstup:
Pravda – rovná se 5 a 5
Pravda – nerovná se 6 a 7
Pravda – 7 větší než 6
Pravda – 6 méně než 7
Pravda – 6 méně než 7
Pravda – 7 větší než 6
Příklady logických operátorů můžete vidět v dalších částech.
Speciální proměnné Perlu
Co jsou speciální proměnné Perlu?
Speciální proměnné v Perlu jsou ty, které mají nějaký předem definovaný význam. Tyto proměnné jsou označeny buď skutečným jménem nebo interpunkčními symboly. Máme speciální proměnnou pro všechny proměnné podporované v Perlu, jako jsou skalární speciální proměnné, speciální proměnné pole, speciální hashovací proměnné. Většina speciálních proměnných, které používáme, jsou skaláry.
Když chceme použít speciální proměnnou s jejím jménem, musíme nahrát modul Perl 'použij angličtinu', abychom interpretu Perlu explicitně řekli, že budeme používat speciální proměnné s jeho názvem.
Skalární speciální proměnné
Proměnlivý | Description |
---|---|
$_$ARG |
Toto je výchozí proměnná, která ukládá aktuální hodnoty. |
$0 nebo $PROGRAM_NAME |
Ukládá název souboru skriptu Perl. |
$/ |
Oddělovač vstupních záznamů, má výchozí hodnotu '\n', což je znak nového řádku |
$. |
Obsahuje aktuální číslo řádku čteného souboru |
$, |
Oddělovač výstupních polí, používá se hlavně v příkazu print(). Ve výchozím nastavení je tato hodnota nastavena na 0, hodnotu této proměnné můžeme změnit. |
$\ |
Výstupní oddělovač záznamů, hodnota této proměnné bude prázdná; tomu můžeme přiřadit libovolnou hodnotu, která bude použita příkazem print() při tisku výstupu. |
$# |
Tato proměnná se používá pro výstupní formát při tisku čísel. |
$%$FORMAT_PAGE_NUMBER |
Podrží aktuální číslo stránky přečteného souboru. |
$=$FORMAT_LINES_PER_PAGE |
Podrží aktuální délku stránky přečteného souboru. |
$-$FORMAT_LINES_LEFT |
Uchovává hodnotu počtu řádků zbývajících k vytištění ze stránky. |
$~$FORMAT_NAME |
Název formátu: Ve výchozím nastavení uchovává formát aktuálně vybraného výstupu název popisovače souboru. |
$^$FORMAT_TOP_NAME |
Obsahuje hodnotu formátu záhlaví obslužného programu souboru, výchozí hodnota bude _TOP následovaná názvem popisovače souboru. |
$|$OUTPUT_AUTOFLUSH |
Výchozí hodnota je nula; to se používá k vyprázdnění výstupní vyrovnávací paměti po každém write() nebo print(). |
$$ |
Bude obsahovat číslo běžícího procesu interpretu Perl. |
$? |
Stavový kód: Pipe a systémové volání. Návratový stav provedeného příkazu. |
$&$MATCH |
Používá se v regulárních výrazech, bude obsahovat řetězec poslední úspěšné shody vzoru. |
$`$PŘEDMATCH |
Při použití v regulárních výrazech bude obsahovat řetězec, kterému předchází poslední úspěšná shoda vzoru. |
$'$POSTMATCH |
Používá se v regulárních výrazech, bude obsahovat řetězec, který následuje poslední úspěšná shoda vzoru. |
$+$LAST_PAREN_MATCH |
Obsahuje řetězec poslední závorky, který odpovídá poslednímu vyhledávání vzoru. |
$ |
$1, $2, $3…. Uchovává hodnoty vzoru v pořadí. |
$[ |
První index: Pole, podřetězec. |
$] |
Verze Perlu. |
$ ” |
Oddělovač používaný pro prvky seznamu je standardně prázdný znak. |
$; |
Oddělovač dolního indexu používaný ve vícerozměrných polích |
$! |
V číselném kontextu vypíše číslo chyby. V kontextu řetězce vypište chybu. |
$@ |
Bude obsahovat informace o chybě syntaxe, které se používají při použití eval(). |
$< |
Obsahuje skutečné UID (ID uživatele) procesu spouštějícího skript. |
$> |
Obsahuje efektivní UID procesu spouštějícího skript. |
$( |
Obsahuje skutečné GID (ID skupiny) procesu spouštějícího skript. |
$) |
Obsahuje efektivní GID procesu spouštějícího skript. |
$^D$LADĚNÍ |
Obsahuje aktuální hodnotu příznaků ladění. |
$ ^ C |
Uchovává aktuální hodnotu příznaku, když je použit přepínač příkazového řádku –c. |
$^F |
Maximální hodnota deskriptoru systémového souboru je standardně nastavena na 2 |
$^I$INPLACE_EDIT |
Obsahuje hodnotu přepínače příkazového řádku –i. |
$^M |
Speciální paměťový fond lze použít, když skript Perl zemře s chybou nedostatku paměti. |
$^O$OSNAME |
Operajsou uloženy informace o systému. 'Linux' pro systémy Linux, 'mswin32' pro Windows systémy. |
$^T$BASETIME |
Čas, kdy jsou skripty spuštěny v sekundách. |
$^W$VAROVÁNÍ |
Aktuální hodnota přepínače příkazového řádku –w. Výstražný spínač. |
$ARGV |
Název aktuálního souboru při použití <>. |
Speciální proměnné pole:
Proměnlivý | Description |
---|---|
@INC |
Obsahuje seznam cest, kde lze při provádění aktuálního skriptu nahlížet do modulů knihovny Perl nebo skriptů. Tento @INC se používá při použití a vyžaduje příkazy k nahlédnutí do těchto cest pro moduly knihoven. |
@ARGV |
Ukládá předané argumenty příkazového řádku. |
@_ |
Používá se v podprogramech při předávání parametrů podprogramům. |
@F |
Toto je pole, do kterého se ukládají vstupní řádky při automatickém rozdělení –a (používá se přepínač příkazového řádku). |
Hash speciální proměnné:
Proměnlivý | Description |
---|---|
%INC |
Název souboru bude klíče; hodnoty budou cestou k těmto souborům. Používáno udělej, použij a požaduj. |
%ENV |
Systémové proměnné prostředí. |
%SIG |
Signals manipulátor. |
Regulární výraz v Perlu
Co je regulární výraz?
Regulární výraz Perlu je dostatečně silný při porovnávání vzorců řetězců v rámci příkazů nebo skupiny příkazů. Regulární výrazy se většinou používají při analýze textu, porovnávání vzorů a mnoha dalších na základě požadavku. Máme určité operátory, které se speciálně používají při vazbě vzorů regulárních výrazů =~ a !~. Jedná se o operátory test a přiřazení.
Regulárních výrazů Operatorů

Regulárních výrazů Operators v perlu
- Perl Match — m//
- Perl náhradník – s///
- Perl Transliterate – tr///
Než půjdeme dále, potřebujeme vědět pár věcí o regulárním výrazu; existují určité věci, jako jsou meta znaky, zástupné znaky v syntaxi Perl Regex.
Char | Význam |
---|---|
\ |
Speciální nebo citace |
* |
Odpovídá 0 nebo více znakům |
+ |
Odpovídá 1 nebo více znakům |
? |
Porovnejte 0 nebo 1 znak |
| |
Lze použít k přizpůsobení alternativních vzorů |
() |
Slouží k uložení přizpůsobeného vzoru |
[] |
Lze předat sadu znaků. Konkrétně se používá pro číslice a abecedy. |
{} |
Používá se pro poskytnutí počtu časů, kdy lze zápas provést. |
^ |
Začátek řetězce |
$ |
Konec řetězce |
\w |
Používá se pro shodu jednoho znaku nebo slova, které může být alfanumerické včetně „_“ |
\W |
Shodujte se s čímkoli jiným než alfanumerickými |
\s |
Používá se k přiřazení mezer |
\S |
Shodujte se s čímkoli jiným než mezerami |
\d |
Zápasová čísla. Ne desetinné hodnoty a záporné hodnoty |
\D |
Spojte cokoliv jiného než čísla. |
\t |
Odpovídající prostor na kartě |
\n |
Přizpůsobit nový řádek |
Výše uvedené jsou sady znaků, které lze použít při porovnávání vzorů.
Podívejme se na několik příkladů.
Uvažujme situaci, kdy uživatel poskytuje nějaký vstup během provádění skriptu a my chceme zkontrolovat, zda uživatel zadal nějaké jméno jako vstup nebo ne. Musíme napsat syntaxi regulárního výrazu, abychom extrahovali vaše jméno a vytiskli to samé.
my $userinput="Guru99 Rocks"; if($userinput=~m/.*(Guru99).*/) { print "Found Pattern"; } else { print "unable to find the pattern"; }
Výstup:
Nalezený vzor
Zde jsme zapsali regulární výraz jako /.*(Guru99).*/.* odpovídají všem znakům v řetězci. A '.' v perlu shoda regulárního výrazu odkazuje na jakýkoli znak včetně mezery.
Podívejme se, jak přesně můžeme vytvořit Regex.
Zvažte příklad řetězce více slov a číslic a speciálních symbolů, jako je tento „Ahoj všichni, toto je moje číslo: +91-99298373639“;
Regex : /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i
Mezera mezi slovy mezera mezi slovy mezera mezi slovy mezera mezi slovy mezera mezi slovy mezera mezi slovy speciální znak : mezera speciální znak+číslice speciální znak –číslice.
Perl Match Operatorů
Operátory shody se používají ke shodě řetězce v nějakém příkazu nebo v proměnné.
my $var="Hello this is perl"; if($var=~m/perl/) { print "true"; } else { print "False"; }
Výstup:
pravdivý
Tento malý kód vypíše 'true', protože porovnávání vzoru perl identifikuje řetězec v proměnné. V podstatě Perl hledá text poskytnutý v // v celém řetězci, i když najde na jednom místě, vrátí 'true'. Vzor může být kdekoli v proměnné. Můžeme zkusit nahradit =~ znakem !~, abychom viděli rozdíl mezi těmito dvěma operátory.
Náhrada Perlu OperaTor
Tento operátor lze použít pro vyhledávání a nahrazování libovolného znaku buď znakem null, nebo jiným znakem.
my $a="Hello how are you"; $a=~s/hello/cello/gi; print $a;
Výstup:
violoncello jak se máš?
Poznámka: Ve skutečnosti můžeme použít jakýkoli řetězec odpovídající vzoru, jak jsme to udělali dříve v tomto substitučním operátoru. Zde jsme použili 'gi', g-globally, i-ignore case.
Překlad Perl OperaTor
Je to podobné jako Substitution, ale nepoužívá žádné regulární výrazy perlu, spíše můžeme přímo předat hodnotu nebo slovo, které chceme nahradit.
my $a="Hello how are you"; $a=~tr/hello/cello/; print $a;
Výstup:
Ahoj krávo ty jsi
Perl File I/O
Perl byl navržen pro efektivní manipulaci se soubory a I/O operacemi. Hlavní výhoda Perlu je v analýze souborů a manipulaci se soubory. Existuje mnoho vestavěných funkcí a operátorů používaných při práci se soubory v Perlu.
V zásadě se operace se soubory, které se provádějí v Perlu, provádějí pomocí FILEHANDLE. Tento FILEHANDLE musíme definovat při otevírání souboru pro čtení nebo zápis.
V tomto tutoriálu skriptu v Perlu se naučíte-
Perl Otevřete soubor
Soubor můžeme otevřít pomocí funkce open() dostupné v Perlu.
open(FILEHANDLE, "filename or complete path of the file");
Nyní jsme otevřeli soubor, nyní vyvstává otázka. Je to na čtení nebo psaní?
Perl číst soubor a Perl zapisovat soubor
Perl má určité režimy, které je třeba použít ke čtení, zápisu nebo připojení souboru.
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");
Několik příkladů pro čtení souboru:
Uvažujme, že máme soubor v perlu s názvem file.txt a obsahuje několik řádků textu. Musíme tento soubor otevřít a vytisknout.
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;
Tím se vytiskne obsah souboru na výstupní obrazovce.
Nyní napíšeme program, který vytvoří a zapíše data do souboru perl.
open(FH,">test.txt"); my $var=<>; print FH $var; close FH;
Tím se zapíše vstup poskytnutý během běhu a vytvoří se soubor test.txt, který bude mít vstup.
Výše uvedený způsob se vždy pokusí vytvořit soubor s názvem test.txt a zapíše vstup do souboru; totéž napíšeme pro připojení souboru.
open(FH,">>test.txt"); my $var=<>; print FH $var; close FH;
Režimy | Description |
---|---|
< |
číst |
+< |
Čte a píše |
> |
Vytváří, zapisuje a zkracuje |
+> |
Číst, psát, vytvářet a zkracovat |
>> |
Píše, připojuje a vytváří |
+>> |
Čtěte, pište, připojujte a vytvářejte |
Nyní se musíme podívat, jak číst, zapisovat a přidávat soubory pomocí základních příkladů.
Uvidíme několik dalších příkladů a dalších funkcí, které pomohou lépe porozumět souborům.
Perl Tell
Tato metoda vrátí aktuální pozici FILEHANDLER v bajtech, pokud je zadáno jinak, bude považovat poslední řádek za pozici.
open(FH, "test.pl"); while(<FH>) { $a=tell FH; print "$a"; }
Perl Seek
Funkce Seek je podobná systémovému volání fseek. Tato metoda se používá k umístění ukazatele souboru na určité místo zadáním bajtů následovaných buď začátkem ukazatele souboru, nebo koncem ukazatele souboru.
seek FH, bytes, WHENCE;
WHENCE je pozice ukazatele souboru na začátek. Nula jej nastaví od začátku souboru.
Příklad: Nechte soubor input.txt obsahovat některá data jako „Ahoj, toto je můj svět“.
open FH, '+<','input.txt'; seek FH, 5, 0; # This will start reading data after 5 bytes. $/ = undef; $out = <FH>; print $out; close FH;
Výstup:
toto je můj svět
Perl Unlink
Unlink se používá k odstranění souboru.
unlink("filename or complete file path");
Manipulace s adresáři:
Zvládneme i adresáře, přes které můžeme obsluhovat více souborů.
podívejme se, jak otevřít adresář. Můžeme použít metody opendir a readdir.
opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler. while(readdir(DIR)) # loop through the output of readdir to print the directory contents. { print "$_\n"; } closedir(DIR); #used to close the directory handler.
or
opendir(DIR,"C:\\Program Files\\"); @content=readdir(DIR); foreach(@content) { print "$_\n"; } closedir(DIR);
Tím se vytisknou všechny dostupné soubory v tomto adresáři.
Testy souborů Perl a jejich význam
-r |
Chcete-li zkontrolovat, zda je soubor/adresář čitelný pro aktuálního uživatele/skupinu |
-w |
Chcete-li zkontrolovat, zda je soubor/adresář zapisovatelný aktuálním uživatelem/skupinou |
-x |
Chcete-li zkontrolovat, zda je soubor/adresář spustitelný aktuálním uživatelem/skupinou |
-o |
Chcete-li zkontrolovat, zda soubor/adresář vlastní aktuální uživatel |
-R |
Chcete-li zkontrolovat, zda je soubor/adresář čitelný pro tohoto skutečného uživatele/skupinu |
-W |
Chcete-li zkontrolovat, zda do souboru/adresáře může tento skutečný uživatel/skupina zapisovat |
-X |
Chcete-li zkontrolovat, zda je soubor/adresář spustitelný tímto skutečným uživatelem/skupinou |
-O |
Chcete-li zkontrolovat, zda soubor/adresář vlastní tento skutečný uživatel |
-e |
Chcete-li zkontrolovat, zda existuje název souboru/adresáře |
-z |
Chcete-li zkontrolovat, zda soubor existuje a má nulovou velikost (vždy false pro adresáře) |
-f |
Chcete-li zkontrolovat, zda je položka prostý soubor |
-d |
Chcete-li zkontrolovat, zda je Entry adresář |
-l |
Chcete-li zkontrolovat, zda je vstup symbolickým odkazem |
-S |
Chcete-li zkontrolovat, zda je Entry zásuvka |
-p |
Chcete-li zkontrolovat, zda je položka pojmenovaná roura (“FIFO”) |
-b |
Chcete-li zkontrolovat, zda je položka speciální blokový soubor (jako připojitelný disk) |
-c |
Chcete-li zkontrolovat, zda je položka Položka speciální znakový soubor (jako I/O zařízení) |
-u |
Chcete-li zkontrolovat, zda je soubor nebo adresář setuid |
-g |
Chcete-li zkontrolovat, zda je soubor nebo adresář setgid |
-k |
Chcete-li zkontrolovat, zda má soubor nebo adresář nastaven lepivý bit |
-t |
Daný filehandle je TTY (protože pomocí systémové funkce isatty() nelze tímto testem otestovat názvy souborů) |
-T |
Chcete-li zkontrolovat, zda soubor vypadá jako „textový“ soubor |
-B |
Chcete-li zkontrolovat, zda soubor vypadá jako „binární“ soubor |
-M |
Chcete-li zkontrolovat stáří změny (měřeno ve dnech) souboru |
-A |
Chcete-li zkontrolovat věk přístupu (měřeno ve dnech) souboru |
-C |
Chcete-li zkontrolovat stáří modifikace inodu (měřeno ve dnech) souboru |
Podprogram Perl
Co je to podprogram?
Podprogramy jsou podobné funkcím v jiných programovacích jazycích. Již jsme použili některé vestavěné funkce jako print, chomp, chop atd. Můžeme si psát vlastní podprogramy v Perlu. Tyto podprogramy lze zapsat kdekoli v programu; je vhodnější umístit podprogramy buď na začátek nebo na konec kódu.
Příklad podprogramů
sub subroutine_name { Statements…; # this is how typical subroutines look like. }
Nyní, když víme, jak napsat podprogram, jak k němu přistupovat?
Potřebujeme přistupovat nebo volat podprogram pomocí názvu podprogramu s předponou '&'.
sub display { print "this is a subroutine"; } display(); # This is how we call a subroutine
Předávání parametrů Perlu a argumentů Perlu
Jsou napsány podprogramy nebo funkce perlu, aby do nich umístily znovu použitelný kód. Většina opakovaně použitelného kódu vyžaduje předání parametrů do podprogramu. Zde se naučíme, jak můžeme předat argumenty podprogramu.
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.
Výstup:
3 je předaná hodnota
@_ je speciální proměnná pole, která ukládá argumenty předané podprogramům.
Perl Shift
Můžeme také použít klíčové slovo 'shift', které posouvá jeden parametr po druhém do proměnné nebo $_[0],$_[1]… což je individuální prvek pole @_
sub display { my $var=shift; print "$var is passed"; } display("hello");
Výstup:
ahoj je prošel
Podprogramy se obvykle používají v objektově orientovaném programování a také na místech, kde můžete umístit více znovupoužitelného kódu.
Hlavní funkcí podprogramů je provést nějakou úlohu a vrátit výsledek znovu použitelného kódu.
Můžeme vrátit hodnotu z podprogramu pomocí klíčového slova return.
sub add { my $a=shift; my $b=shift; return($a+$b); } my $result=add(5,6); print $result;
Výstup:
11
$result bude mít hodnotu přidaných $a a $b.
Můžeme také předat hashe a pole přímo do podprogramu.
sub hash { my %hash=@_; print %hash; } %value= ( 1=>'a', 2=>'b'); &hash(%value);
Výstup:
1a2b
Můžeme také vrátit hash nebo pole.
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;
Výstup:
Uvnitř podprogramu2b1aPo podprogramu call2b1a
Formát Perl
Perl má mechanismus, pomocí kterého můžeme generovat zprávy. Pomocí této funkce můžeme při tisku na obrazovce Výstup nebo v souboru vytvářet sestavy přesně tak, jak chceme. Jednoduchý formát lze napsat pomocí funkcí printf nebo sprintf dostupných v Perlu.
printf "%05d\n", 30;
To bude zahrnovat úvodní nuly před číslem 30, takže celkový počet číslic je 5. Totéž lze použít pro sprintf.
sprintf "%05d\n", 30; # This will print the same as printf.
Pomocí printf a sprintf můžeme získat většinu formátů Perl. V případě hlášení to bude obtížné realizovat.
================================================== =========================
Jméno Adresa Věk Telefon
================================================== =========================
Krishna Chennai 24 929309242
Shruthi Chennai 24 929309232
Výše uvedené je příklad sestav, které potřebujeme vytisknout stejným způsobem v Perlu. Toho lze dosáhnout pomocí perl printf a perl sprintf. Lze jej efektivně implementovat pomocí formátu.
Formát lze deklarovat níže uvedeným způsobem.
format FORMATNAME=FORMATLIST.
Zde budeme používat konkrétní metodu zápisu pro tisk dat na výstupní obrazovku nebo do souboru.
Symbol | Description |
---|---|
@ |
Používá se k reprezentaci začátku držáku pole |
> |
Pravé zarovnání textu |
< |
Zarovnání textu doleva |
| |
Zarovnání na střed |
# |
Číselné, pokud je zadáno více #. Předpokládá se jako komentář, pokud je zadáno jediné # |
. |
Desetinná čárka |
^ |
Začátek držáku pole lze také použít pro víceřádkový a také pro zalamování slov |
~ |
Pokud je proměnná prázdná, řádek by měl být prázdný |
@* |
Více řádků. |
($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 .
Spusťte kód, abyste viděli výstup.
Používáme symbol @ k určení začátku držitele pole nebo řetězce, '<' každého znaku.
Pro tisk na standardní výstup používáme STDOUT. Můžeme to změnit na handler souboru, který používáme k zápisu dat do souboru.
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
Můžeme nahradit '<' za '>' nebo '|' pro změnu zarovnání textu.STDOUT_TOP se používá k návrhu záhlaví formátu.Totéž můžeme použít také s obslužným programem souboru pomocí FH_TOP(FH je obslužný program souboru).Tímto výstupem bude formát souboru, se kterým pracujeme na.
Standardy kódování Perl
Každý programátor bude mít svůj vlastní smysl pro psaní kódu pomocí určitých standardů; tyto standardy by měly být dostatečně známé, aby jiný programátor mohl kód správně pochopit a podporovat.

Kódovací standardy v Perlu
Psaní kódu je jednoduché a snadné. Problém nastává, když je potřeba jej udržovat v pozdějších fázích. Při psaní kódu je třeba dodržovat správné pokyny a standardy kódování. Perl také definuje určité standardy, které budou užitečné pro programátory při psaní kódu. Při psaní kódu je vhodné načíst modul 'strict' a 'warnings'. Každý z těchto modulů má svůj význam. Strict nás přinutí deklarovat proměnnou před použitím a také zjistí, zda je ve vašem kódu přítomno nějaké holé slovo. Modul Warnings lze alternativně použít předáním volby '-w' interpretu Perl v shebang. Na výstupní obrazovce se vytisknou varování.
#!/usr/bin/perl –w
Níže je několik seznamů norem.
- Použijte modul 'přísné' a 'varování'.
- Odeberte proměnnou, která se nepoužívá.
- Názvy proměnných by měly být srozumitelné ostatním uživatelům. Příklad: $name, @fileData atd.
- Při kódování skriptu je vyžadována dokumentace.
- Nekódujte napevno žádné hodnoty, raději je zkuste načíst dynamicky nebo požádejte uživatele o zadání během běhu. (Cesta k souboru, Názvy souborů).
- Maximalizujte opětovné použití kódu. Zkuste znovu použitelný kód vložit do podprogramů.
- U podprogramů by měla být uvedena celá jména.
- Podprogramy je třeba napsat s příslušnými komentáři a dokumentací.
- Vždy inicializujte proměnné.
- Vždy zkontrolujte návratové kódy pro systémová volání. Otevření souboru se může, ale nemusí, stát, návratový kód zde zobrazí chybový stav, pokud soubor neexistuje.
Př: open(FH,
- Podprogram by měl vždy vrátit hodnotu.
- Otevřete kudrnaté ve stejném řádku.
- Jeden řádek BLOCK lze umístit do jednoho řádku se složenými.
- Používejte štítky během LOOPS, bylo by snadné opustit smyčku, kdykoli je to nutné.
- Použijte podtržítko, když jsou dlouhé fráze slov psány jako název proměnné nebo podprogram.
- Zkuste při kódování použít jednoduchý regulární výraz.
Perfektní příklad s kódovacími standardy:
####################################################################### 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
Zpracování chyb v Perlu
Co je to výjimka?
Výjimkou je událost, která nastane během provádění programu, která pozastaví nebo ukončí váš program.
Vypořádání se s chybou
Zpracování chyb je takové, které musí každý programátor dbát při programování. Perl také poskytuje techniky zpracování chyb, pomocí kterých můžeme chyby zachytit a podle toho s nimi naložit.

Zpracování chyb v Perlu
Existuje mnoho způsobů, jak zkontrolovat chyby v programu. Musíme prozkoumat návratové kódy funkce, kterou kód používáme. Pokud jsme schopni zpracovat tyto návratové kódy správně, pak lze dosáhnout většiny zpracování chyb.
Co se vrátí v případě systémových volání?
V případě systémových volání se návratový stav uloží do dvou speciálních proměnných $? A $!
$! – Tím se zachytí číslo chyby nebo číslo chyby spojené s chybovou zprávou.
$? – Tím bude zachována funkce návratového stavu system().
Pomocí operátoru Perl nebo Logical
Pro zpracování chyb při používání systémových volání můžeme použít logiku nebo operátor.
ex:
open(FH,"<test.txt");
Tím se soubor otevře v režimu čtení, pokud soubor existuje.
Co když soubor chybí?
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
Funkce Eval dokáže zpracovat fatální chyby, chyby v době kompilace, chyby za běhu a ty chyby, které v určitém okamžiku ukončí váš kód.
Funkce Perl Eval může mít blok kódu nebo výraz. Evans považuje vše, co je v něm umístěno, za řetězec.
Zvažte situaci volání podprogramu, který není definován ve skriptu. V této situaci se skript ukončí sdělením „nedefinovaný podprogram &XYZ, tuto chybu lze ošetřit ve funkci eval.
Existuje mnoho použití evals bloku; jedno takové použití je, když chceme za běhu načíst modul, který je specifický pro operační systém.
Příklad: Dělení nulou způsobí závažnou chybu; abychom to zvládli, můžeme umístit kód do bloku evals.
$a=5; $b=0; eval { '$result=$a/$b'; } if($@) { print "$@"; # All the error codes returned by evals will get stored in $@. }
Výstup:
chyba syntaxe v C:\Users\XYZ\Text.pl řádek 8, poblíž „“)
{“
Provádění C:\Users\XYZ\Text.pl bylo přerušeno kvůli chybám při kompilaci.
Příklad: eval pomocí příkazu perl die.
sub test { die "Dieing in sub test \n"; } eval { test(); }; print "Caught : $@\n";
Výstup:
Chycen: Umírání v dílčím testu
Pomocí Perlu Zkuste
Perl nepodporuje bloky try, catch a nakonec kód jako jiné programovací jazyky. Stále je můžeme používat načtením externího modulu Perl.
použijte Try::Tiny;
Pomocí toho můžeme umístit váš kód do bloku try a zachytit chybu v bloku varování.
Místo $@ použitého v eval Try::Tiny používá $_.
# ošetřit chyby pomocí handleru catch
try { die "Die now"; } catch { warn "caught error: $_"; # not $@ };
Konečně použití.
my $y; try { die 'foo' } finally { $y = 'bar' }; try { die 'Die now' } catch { warn "Returned from die: $_" } finally { $y = 'gone' };
Výstup:
foo na C:\Users\XYZ\Text.pl řádek 4.
Tímto způsobem můžeme použít try, catch a nakonec.
zkuste { # prohlášení }
zachytit {# prohlášení }
konečně { # prohlášení };
Or
try { # statement } finally { # statement };
Výstup:
Or
try { # statement } finally { # statement } catch { # statement };
Výstup:
Programování Perl Socket
Co je to zásuvka?
Soket je médium, jehož prostřednictvím mohou dva počítače komunikovat v síti pomocí síťové adresy a portů.
Předpokládejme, že A (Server) a B (Klient) jsou dva systémy, které musí pro spouštění některých programů vzájemně komunikovat pomocí Sockets.
Abychom to mohli implementovat, musíme vytvořit sokety v A (Server) i B (Klient), A bude ve stavu příjmu a B bude ve stavu odesílání.
A (Server):
Zde si server přeje přijmout spojení od B (Klient) a provést některé úkoly a odeslat výsledek zpět B (Klient). Když spustíme kód, operační systém v A se pokusí vytvořit soket a naváže jeden port na tento soket. Poté bude poslouchat od odesílatele, kterým je B.
B (Klient).
Zde si klient přeje poslat nějaký program ze svého systému do A (Serveru) ke zpracování. Když spustíme kód, operační systém v B se pokusí vytvořit soket pro komunikaci s A (Server), B musí specifikovat IP adresu a číslo portu A, ke kterému se B chce připojit.
Pokud to půjde dobře, oba systémy budou interagovat a vyměňovat si informace přes jeden port. Perl také podporuje programování soketů.
Perl má nativní API, přes které lze implementovat sockety. Aby to nebylo jednoduché, existuje mnoho modulů CPAN, pomocí kterých píšeme soketové programy.
Operace serveru:
- Vytvořit zásuvku
- Svázat zásuvku s adresou a portem
- Poslouchejte soket na této adrese portu
- Přijměte připojení klienta, který se pokouší připojit pomocí portu a IP serveru
- Provádějte operace
Klient Operaakce:
- Vytvořit zásuvku
- Připojte se k serveru pomocí jeho adresy portu
- Provádějte operace
socket.io
Jedná se o jeden modul pro programování socketů, který je založen na objektově orientovaném programování. Tento modul nepodporuje typ sítě INET používaný v sítích.
IO::Zásuvka::INET:
Tento modul podporuje doménu INET a je postaven na IO::Sockets. Všechny metody dostupné v IO::Sockets jsou zděděny v modulu INET.
Klient a server používající protokol TCP:
TCP je protokol orientovaný na připojení; tento protokol budeme používat pro programování socketů.
Než budeme pokračovat dále, podívejme se, jak můžeme vytvořit objekt pro modul IO::Socket::INET a vytvořit soket.
$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";
Nová metoda v modulu IO::Socket::INET přijímá hash jako vstupní parametr do podprogramu. Tento hash je předdefinovaný a my potřebujeme pouze poskytnout hodnoty klíčům, které chceme použít. Existuje seznam klíčů používaných tímto hashem.
PeerAddr |
Adresa vzdáleného hostitele |
PeerHost |
Synonymum pro PeerAddr |
PeerPort |
Vzdálený port nebo služba |
LocalAddr |
Adresa místní vazby hostitele |
localhost |
Synonymum pro LocalAddr |
LocalPort |
Port místní vazby hostitele |
Proto |
Název protokolu (nebo číslo) |
Typ |
zásuvka typu |
Poslouchat |
Velikost fronty pro poslech |
ReuseAddr |
Před vázáním nastavte SO_REUSEADDR |
Opakované použití |
Před vázáním nastavte SO_REUSEADDR |
ReusePort |
Před vázáním nastavte SO_REUSEPORT |
Broadcast |
Před vázáním nastavte SO_BROADCAST |
Timeout |
Hodnota časového limitu pro různé operace |
MultiHomed |
Vyzkoušejte všechny adresy pro hostitele s více adresami |
Blokování |
Určete, zda bude připojení v režimu blokování |
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);
Poznámka:
Při programování soketů budeme muset nejprve spustit Server.pl a poté klient.pl jednotlivě v různých příkazových řádcích, pokud běžíme na místním hostiteli.
Co je to Perl Modules and Packages
Moduly a balíčky spolu úzce souvisí a jsou nezávislé. Balíček: Balíček v Perlu je také známý jako jmenný prostor a obsahuje všechny jedinečné proměnné, jako jsou hash, pole, skaláry a podprogramy. Modul: Modul je kolekce opakovaně použitelného kódu, do kterého zapisujeme podprogramy. Tyto moduly lze načíst do programů v jazyce Perl, aby bylo možné využívat podprogramy napsané v těchto modulech.
Co jsou moduly Perl?
Standardní moduly se nainstalují během instalace Perlu na jakýkoli systém. CPAN: Komplexní Perl Archive Network – Globální úložiště modulů Perl. Naše vlastní přizpůsobené moduly Perl, které můžeme napsat sami. V podstatě modul po načtení v libovolném skriptu exportuje všechny své globální proměnné a podprogramy. Tyto podprogramy mohou přímo volat, jako by byly deklarovány v samotném skriptu. Perl Moduly mohou být zapsány s příponou .pm k názvu souboru Př: Foo.pm. Modul lze napsat pomocí „balíčku Foo“ na začátku programu.
Základní modul Perl:
#!/usr/bin/perl package Arithmetic; sub add { my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
Žádný výstup
Abychom mohli tento modul Perl používat, musíme jej umístit do aktuálně funkčního adresáře.
Můžeme načíst modul Perl pomocí požadavku nebo použití kdekoli v kódu. Hlavní rozdíl mezi vyžadovat a používat je vyžadovat načtený modul během běhu a používat načítání během kompilace.
#!/usr/bin/perl require Arithmetic; print Arithmetic::add(5,6); print Arithmetic:: subtract (5,6);
Zde, ve výše uvedeném příkladu, přistupujeme k podprogramům pomocí plně kvalifikovaného názvu modulu.
K balíčku můžeme také přistupovat pomocí 'použít aritmetiku'.
Vývozce:
Tento modul má výchozí funkci importu metod.
#!/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;
Pole @EXPORT lze použít k předání seznamu proměnných a podprogramů, které budou standardně exportovány volajícímu modulu.
Pole @EXPORT_OK lze použít k předání seznamu proměnných a podprogramů, které budou exportovány na vyžádání, kde uživatel musí specifikovat při načítání modulu.
#!/usr/bin/perl use Arithmetic qw(subtract); print add(5,6); print subtract (5,6);
Ve výchozím nastavení bude exportován podprogram add. Metoda odečítání nebude exportována, pokud není specifikována při načítání modulu.
Objektově orientované programování v Perlu
V této části se naučíme, jak vytvořit objektově orientované moduly v Perlu. Nejprve se podívejme, co je to za objekt? Objekt je instance, pomocí které můžeme přistupovat, upravovat a lokalizovat některá data v libovolném modulu Perlu. Nejde o nic jiného, než o to, aby váš stávající balík Perl, proměnné a podprogramy fungovaly jako třída, objekty a metody ve vztahu k jiným programovacím jazykům.
Vytvořit třídu
Jak vytvářet moduly již víme z předchozího tématu. Účelem třídy je ukládat metody a proměnné. Modul Perl bude mít podprogramy, které jsou metodami. Potřebujeme přístup k těmto proměnným a objektům podprogramů.
Perl Constructor
Konstruktor v Perlu je metoda, která provede a vrátí nám odkaz s názvem modulu označeným jako odkaz. Tomu se říká požehnání třídy. Pro požehnání perlské třídy používáme konkrétní proměnnou, což je bless.
#!/usr/bin/perl package Arithmetic; sub new { my $class=shift; my $self={}; bless $self, $class; return $self; } sub add { my $self= shift; my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $self= shift; my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
Nová metoda používaná jako konstruktor pro třídu. Tento konstruktor nám vytvoří objekt a vrátí se do skriptu, který volá tento konstruktor.
#!/usr/bin/perl use Arithmetic; my $obj= Arithmetic->new(); my $result= $obj->add(5,6); print "$result"; $result = $obj->subtract(6,5); print "$result";
Zde musíme pochopit, jak objekt vznikl. Kdykoli se snažíme vytvořit objekt pro třídu, musíme použít celý název třídy. Předpokládejme, že třída perl je umístěna v nějaké lib\Math\Arithmetic.pm. A pokud chceme přistupovat k této třídě perl z adresáře lib, musíme při volání skriptu poskytnout celou cestu ke třídě.
use lib::Math::Arithmetic;
my $obj = lib::Math::Arithmetic->new();
Takto probíhá vytváření objektů v Perlu.
@INC:
Jak skript v Perlu ví, kde existuje modul knihovny? Perl zná pouze aktuální adresář skriptu a cestu k vestavěné knihovně Perlu. Kdykoli použijeme modul Perl, který není umístěn v aktuálním adresáři nebo cestě knihovny Perl, skript vždy selže. O @INC, toto je pole, které obsahuje všechny cesty k adresářům, kde musí hledat moduly Perl. Zkuste tento příkaz provést a uvidíte, jaký bude výstup.
perl –e "print @INC"
To poskytne určitý výstup a to je cesta, kde budou dostupné moduly lib. Kdykoli použijeme jakýkoli nový knihovní modul, musíme říci interpretovi Perlu, aby se podíval na konkrétní místo, kde je modul Perl dostupný.
push(@INC, "PATH TO YOUR MODULE");
Udělejte to jako první řádek kódu. To řekne vašemu tlumočníkovi, aby se podíval na tuto cestu. nebo použití
lib Arithmetic; # List here is your Perl Module location
Perl Destructor
Destruktor objektu je standardně volán na konci a před ukončením skriptu. To se používá ke zničení vašich objektů z paměti.
PERL V/s Shell Scripting
- Programování v Perlu nezpůsobuje problémy s přenositelností, což je běžné při použití různých shellů ve skriptování shellu.
- Ošetření chyb je v Perlu velmi snadné
- Na Perlu můžete snadno psát dlouhé a složité programy díky jeho rozlehlosti. To je na rozdíl od Shell, který nepodporuje jmenné prostory, moduly, objekty, dědičnost atd.
- Shell má k dispozici méně opakovaně použitelných knihoven. Nic ve srovnání s CPAN v Perlu
- Shell je méně bezpečný. Volá externí funkce (příkazy jako mv, cp atd. závisí na použitém shellu). Naopak Perl odvádí užitečnou práci při používání vnitřních funkcí.
Jak se PERL používá v automatizačním testování
Perl je široce používán v automatizaci. Nemusí to být nejlepší programovací jazyky na světě, ale nejlépe se hodí pro určité typy úloh. Pojďme diskutovat o tom, kde a proč se Perl používá Testování automatizace.
Testování úložiště
Co je úložiště? Data uložená v Souborech.
Předpokládejme, že máme související úložiště Testovací případ kde musíme zapsat data na jeden oddíl, přečíst je a ověřit, že jsou data zapsána správně.
To lze provést ručně, ale může ruční tester provést totéž 10000 XNUMXkrát? Bude to noční můra! Potřebujeme automatizaci
Nejlepším nástrojem pro automatizaci čehokoli souvisejícího s úložištěm je Perl kvůli jeho technikám zpracování souborů, REGEX a výkonnou analýzu souborů, která ve srovnání s jinými programovacími jazyky spotřebovává nejmenší dobu provádění.
Proč potřebujeme testovat úložiště? Přemýšlejte o velkých datových centrech, kde budou data nepřetržitě proudit z jednoho systému do druhého s 1000 uloženými záznamy za sekundu. Testování robustnosti takového skladovacího mechanismu je zásadní.
Mnoho společností jako HP, Dell, IBM a mnoho výrobců serverů používá Perl jako rozhraní pro testování funkčnosti v doménách Storage a Networking. NetApp je jednou z takových společností, která kompletně pracuje na Storage a používá Perl jako programovací jazyk k automatizaci testovacích případů.
Pokud se zajímáte o Perl Automation, pak by bylo vhodné dozvědět se o Storage & Networking Concepts.
Testování serveru a sítě:

Testování serveru a sítě pomocí Perlu
PERL je široce používán při sledování provozuschopnosti serverů a výkonu.
Představte si datové centrum, které má 100 hostitelů (serverů). Musíte se připojit ke každému hostiteli a provádět některé příkazy na dálku. Chcete také restartovat systém a zkontrolovat, až se vrátí online.
Ruční provádění tohoto úkolu pro všech 100 hostitelů bude noční můra. Ale můžeme to snadno automatizovat pomocí PERL
Navrhněte kroky k dosažení výše uvedené automatizace pomocí PERL
- Vezměte vstup ze souboru o informacích o hostiteli, jako jsou (IP, uživatelské jméno a heslo).
- Pomocí Net::SSH2 se připojte ke každému systému a vytvořte kanál pro provádění příkazů.
- Spusťte sadu požadovaných příkazů, např.: ls, dir, ifconfig,ps atd.
- Restartujte systém.
- Počkejte 10 minut, než se systém spustí.
- Otestujte systém pomocí modulu Net::Ping a vytiskněte stav.
Výše uvedený scénář nakódujeme.
Vezměme si soubor nazvaný Input.txt, který bude uchovávat kompletní informace o všech hostitelích, ke kterým se potřebujeme připojit a provést příkaz.
Vstup.txt
192.168.1.2 heslo root
192.168.1.3 heslo root
192.168.1.4 kořenový kořen123
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 Testování
Perl není omezen pouze na testování úložiště a sítě. Můžeme také provádět webové testování pomocí PERL. WWW-Mechanizovat je jeden modul používaný pro testování webu. V zásadě nespustí žádný prohlížeč pro testování funkčnosti webových aplikací, spíše využívá zdrojový kód html stránek.
Můžeme také provádět testování pomocí prohlížeče Selenium IDE, RC, webový ovladač. Perl je podporován pro Selenium.
\n”; #toto podrží zbývající řetězec po dokončení shody.
tisk "