Poradnik Perla

Co to jest Perl?

Perl jest wysokopoziomowym, uniwersalnym, interpretowanym, dynamicznym jฤ™zykiem programowania. Perl to termin oznaczajฤ…cy โ€žPractical Extraction and Reporting Languageโ€, chociaลผ nie ma akronimu dla Perla. Zostaล‚ wprowadzony przez Larry'ego Walla w 1987 roku. Jฤ™zyk Perl zostaล‚ specjalnie zaprojektowany do edycji tekstu. Ale teraz jest szeroko stosowany do rรณลผnych celรณw, w tym administracji systemem Linux, programowania sieciowego, tworzenia stron internetowych itp.

Przeglฤ…d jฤ™zykรณw programowania

Ujmijmy to w prosty sposรณb. Chociaลผ komputery rozumiejฤ… tylko zera i jedynki (jฤ™zyk binarny/jฤ™zyk maszynowy/[jฤ™zyk niskiego poziomu]), dla nas, ludzi, bardzo trudno jest programowaฤ‡ w jฤ™zyku binarnym. Perl to jฤ™zyk programowania, ktรณry wykorzystuje elementy jฤ™zyka naturalnego, czyli sล‚owa uลผywane w powszechnym jฤ™zyku angielskim, dziฤ™ki czemu jest ล‚atwiejszy do zrozumienia przez ludzi [jฤ™zyk wysokiego poziomu] Teraz pojawiล‚ siฤ™ problem; komputery nie rozumiejฤ… jฤ™zykรณw wysokiego poziomu, ktรณre my, ludzie, moลผemy ล‚atwo zrozumieฤ‡. W tym celu potrzebujemy czegoล›, co przetล‚umaczy jฤ™zyk wysokiego poziomu na jฤ™zyk niskiego poziomu. Tutaj z pomocฤ… przychodzi nam tล‚umacz. Interpreter to oprogramowanie, ktรณre konwertuje program napisany w jฤ™zyku wysokiego poziomu na jฤ™zyk niskiego poziomu, aby komputer mรณgล‚ zrozumieฤ‡ i wykonaฤ‡ instrukcje zapisane w programie. Dlatego Perl jest interpretowany jฤ™zyk programowania.

Gdzie uลผywany jest Perl?

Moc jฤ™zyka skryptowego Perl moลผna wykorzystaฤ‡ w wielu dziedzinach. Perl jest najczฤ™ล›ciej uลผywany w rozwoju sieci Web. Perl jest rรณwnieลผ uลผywany do automatyzacji wielu zadaล„ na serwerach sieci Web i innych zadaล„ administracyjnych, moลผe automatycznie generowaฤ‡ wiadomoล›ci e-mail i czyล›ciฤ‡ systemy. Perl jest nadal uลผywany do swojego pierwotnego celu, tj. wyodrฤ™bniania danych i generowania raportรณw. Moลผe generowaฤ‡ raporty dotyczฤ…ce wykorzystania zasobรณw i sprawdzaฤ‡ problemy z bezpieczeล„stwem w sieci. Z tego powodu Perl staล‚ siฤ™ popularnym jฤ™zykiem uลผywanym w rozwoju sieci Web, sieciach i bioinformatyce. Oprรณcz tego wszystkiego perl moลผe byฤ‡ rรณwnieลผ uลผywany do programowania CGI.

Perl moลผe byฤ‡ rรณwnieลผ wykorzystywany do tworzenia i manipulacji obrazami. Oprรณcz tego sieciowanie przez telnet, FTP itp., tworzenie graficznego interfejsu uลผytkownika, elektronika VLSI i tworzenie filtrรณw poczty w celu zmniejszenia praktyk spamowania to niektรณre przypadki uลผycia Perla.

Perl jest rรณwnieลผ znany z implementacji praktyk OOP (programowania obiektowego) i obsล‚uguje wszystkie formy dziedziczenia (proste, wielokrotne i diamentowe), polimorfizm i hermetyzacjฤ™. Perl jest wystarczajฤ…co elastyczny, aby obsล‚ugiwaฤ‡ praktyki proceduralne i OOP jednoczeล›nie. Perl ma rรณwnieลผ dodatkowe moduล‚y, ktรณre pozwalajฤ… pisaฤ‡ lub uลผywaฤ‡/ponownie uลผywaฤ‡ kodu napisanego w Python, PHP, PDL, TCL, Oktawa, Java, C, C++, Basic, Ruby i Lua w skrypcie Perla. Oznacza to, ลผe moลผesz ล‚ฤ…czyฤ‡ Perla z tymi dodatkami jฤ™zyki programowania raczej przepisanie istniejฤ…cego kodu.

Zastosowania jฤ™zyka programowania Perl

Zastosowania jฤ™zyka programowania Perl

Dlaczego warto uลผywaฤ‡ Perla?

Prawdฤ… jest, ลผe istniejฤ… inne jฤ™zyki programowania, ktรณrych moลผna uลผyฤ‡ do wykonania wszystkich czynnoล›ci opisanych powyลผej, wiฤ™c dlaczego miaล‚byล› uลผywaฤ‡ Perla? Perla jest bardzo ล‚atwo siฤ™ nauczyฤ‡, zwล‚aszcza jeล›li masz doล›wiadczenie w programowaniu komputerowym. Perl zostaล‚ zaprojektowany tak, aby uล‚atwiฤ‡ ludziom pisanie i zrozumienie, a nie uล‚atwiaฤ‡ przetwarzanie przez komputery. Uลผywa wyraลผeล„ regularnych. Jego naturalny styl jฤ™zyka rรณลผni siฤ™ od innych jฤ™zykรณw programowania, ktรณre wykorzystujฤ… specyficznฤ… gramatykฤ™ i skล‚adniฤ™; dlatego Perl jest bardzo elastyczny i nie narzuca ci ลผadnego konkretnego sposobu myล›lenia o rozwiฤ…zaniu lub problemie. Perl jest niezwykle przenoล›ny. Moลผe dziaล‚aฤ‡ na kaลผdym systemie operacyjnym, ktรณry ma zainstalowany interpreter Perla, wiฤ™c jest niezaleลผny od platformy. Wszystkie systemy Linux OperaSystemy ting sฤ… wyposaลผone w Perl, wiฤ™c moลผesz od razu zaczฤ…ฤ‡ kodowaฤ‡ w Perlu w Linuksie. Jest to inne niลผ w przypadku skryptรณw powล‚oki, gdzie kod zmienia siฤ™ w zaleลผnoล›ci od uลผywanej dystrybucji Linuksa, co sprawia, ลผe โ€‹โ€‹jest on coraz mniej przenoล›ny Maล‚e, specyficzne zadania w Perlu stajฤ… siฤ™ bardzo ล‚atwe i szybkie. W tym samouczku Perla dla poczฤ…tkujฤ…cych dowiesz siฤ™, jak kodowaฤ‡ maล‚e, szybkie programy do okreล›lonych zadaล„. Weลบmy prosty przykล‚ad klasycznego programu Hello World, ktรณry sล‚uลผy do rozpoczฤ™cia nauki dowolnego jฤ™zyka programowania majฤ…cego korzenie w systemie UNIX:

Przykล‚ad: Perl, witaj ล›wiecie

Prosty przykล‚ad Perla

#!/usr/bin/perl
print "Hello, world!";

Wyjล›cie:

Witaj ล›wiecie!

Powyลผsze dwie linie kodu zostanฤ… wydrukowane Witaj, ล›wiecie! Czy nie byล‚o to zbyt proste i szybkie? Studenci ze znajomoล›ciฤ… jฤ™zyka C, C++ bฤ™dzie wiedziaล‚, ลผe uzyskanie tego samego wyniku w tych jฤ™zykach wymaga znacznie wiฤ™kszej liczby linii kodu.

Moลผesz siฤ™ zastanawiaฤ‡, dlaczego Perl jest tak znany w sieci. Jest to proste, poniewaลผ wiฤ™kszoล›ฤ‡ rzeczy, ktรณre dziejฤ… siฤ™ w sieci, ma charakter TEKSTOWY, a Perl jest bardzo dobry w przetwarzaniu tekstu. Jeล›li porรณwnamy Perla z ktรณrymkolwiek z jฤ™zykรณw, to Perl bฤ™dzie najlepszym jฤ™zykiem, ktรณry jest dobry w obsล‚udze plikรณw, przetwarzaniu tekstu i raportowaniu wynikรณw

Jednฤ… z najlepszych zalet Perla jest to, ลผe tak jest swobodnie korzystaฤ‡

Spoล‚ecznoล›ฤ‡ Perl jest gล‚ฤ™boko przekonana, ลผe โ€‹โ€‹oprogramowanie powinno byฤ‡ swobodnie dostฤ™pne, swobodnie modyfikowalne i swobodnie dystrybuowane. Kilku wolontariuszy ze spoล‚ecznoล›ci Perl stara siฤ™, aby jฤ™zyk programowania byล‚ jak najlepszy.

Zalety i wady Perla

Plusy: Wady:

Zalety Perla

Wady Perla

  • W porรณwnaniu do innych jฤ™zykรณw programowania Perl ma najwiฤ™ksze moลผliwoล›ci w zakresie obsล‚ugi tekstu i analizowania
  • Jest to jฤ™zyk interpretowany o krรณtkim czasie wykonania, poniewaลผ nie ma potrzeby kompilowania skryptu Perla
  • Prosty i ล‚atwy do zaprogramowania i zrozumienia.
  • Jest zorientowany obiektowo.
  • Biblioteka CPAN uล‚atwia tworzenie aplikacji w jฤ™zyku Perl (wiฤ™cej na ten temat powiemy pรณลบniej w tym temacie).
  • Uลผywany w tworzeniu stron internetowych, gล‚รณwnie dla bramek pล‚atniczych.
  • Uลผywany w automatyzacji i do testowania wiฤ™kszoล›ci rzeczy zwiฤ…zanych z sieciฤ… i pamiฤ™ciฤ… masowฤ….
  • W porรณwnaniu z innymi jฤ™zykami programowania obsล‚uga GUI jest minimalna.
  • Musisz odwoล‚aฤ‡ siฤ™ do skomplikowanych moduล‚รณw bibliotecznych, ktรณre nie sฤ… ล‚atwe do zrozumienia (nie bรณj siฤ™, gdy juลผ nauczysz siฤ™, jak to zrobiฤ‡, wszystko stanie siฤ™ ล‚atwe).
  • Zrozumienie zล‚oลผonych wzorcรณw wymaga doล›wiadczenia.

Zacznijmy

Majฤ…c wystarczajฤ…cฤ… wiedzฤ™ na temat historii Perla i podstawowych pojฤ™ฤ‡ programowania komputerowego wymaganych do kodowania w Perlu, nadszedล‚ czas, aby zanurzyฤ‡ siฤ™ i zaczฤ…ฤ‡ z Perlem. Nastฤ™pny rozdziaล‚ nauczy Ciฤ™, jak skonfigurowaฤ‡ Perla w swoim systemie i przygotowaฤ‡ siฤ™ do podrรณลผy kodowania w Perlu. Ten samouczek skryptowania w Perlu bฤ™dzie traktowaล‚ Linuksa jako system operacyjny, ktรณrego uczniowie bฤ™dฤ… uลผywaฤ‡ do kodowania w Perlu.

Pobierz i zainstaluj Perla โ€“ Windows, Mac i Linux

Jak zdobyฤ‡ Perla?

Dobre wieล›ci prawdopodobnie to masz!

Jeล›li jednak nie moลผesz znaleลบฤ‡ go juลผ w swoim systemie, nadal moลผesz pobraฤ‡ go za darmo.

Aby dowiedzieฤ‡ siฤ™, czy masz juลผ zainstalowany Perl, przejdลบ do wiersza poleceล„ i wpisz: perl -v

Jak pobraฤ‡ Perla

Polecenie wyล›wietli wersjฤ™ Perla, jeล›li jest zainstalowany. W tym przypadku wersja to v5.14.2. Ale jeล›li nieโ€ฆ nie panikujโ€ฆ

UnixSamouczek PERL dla poczฤ…tkujฤ…cych โ€” kompletny przewodnik Juลผ zainstalowane Jest fabrycznie zainstalowany w jฤ™zyku Perl, jednak moลผe byฤ‡ konieczna aktualizacja do najnowszej wersji.
Mac OS Samouczek PERL dla poczฤ…tkujฤ…cych โ€” kompletny przewodnik Juลผ zainstalowane OSX ma preinstalowany Perl, chociaลผ moลผe byฤ‡ konieczna jego aktualizacja do najnowszej wersji
WindowsSamouczek PERL dla poczฤ…tkujฤ…cych โ€” kompletny przewodnik Trzeba zainstalowaฤ‡ Dostฤ™pne sฤ… dwie opcje

  1. Strawberry Perl to binarna dystrybucja jฤ™zyka Perl o otwartym kodzie ลบrรณdล‚owym dla platformy Windows system operacyjny. Zawiera kompilator i preinstalowane moduล‚y, ktรณre oferujฤ… moลผliwoล›ฤ‡ instalacji moduล‚รณw XS CPAN bezpoล›rednio z CPAN
  2. ActiveState perl zapewnia binarnฤ… dystrybucjฤ™ Perla (dla wielu platform), a takลผe wล‚asnego menedลผera pakietรณw Perla (PPM)

Aktualizowanie Perla w systemie Linux:

Jeล›li chcesz zaktualizowaฤ‡ wersjฤ™ Perla, po prostu wpisz jednฤ… liniฤ™ poleceล„

sudo apt-get zainstaluj perl

i wyluzuj. Resztฤ… siฤ™ zajmiemy. Upewnij siฤ™ tylko, ลผe masz aktywne poล‚ฤ…czenie z Internetem.

Zaktualizuj PERL w systemie Linux

Zaktualizuj PERL w systemie Linux

Zainstaluj Perla dla Windows:

Najpierw pobierz z tego aktywnego Perla link. Wykonaj poniลผsze kroki, aby zainstalowaฤ‡ ActivePerl Windows system. Zobacz poniลผsze zrzuty ekranu, aby zobaczyฤ‡ to samo.

Krok 1: Po pobraniu instalatora i rozpoczฤ™ciu instalacji zobaczysz poniลผsze okno. Kliknij Dalej, aby kontynuowaฤ‡.

Jak zainstalowaฤ‡ Perla na Windows

Krok 2: Zaakceptuj umowฤ™ licencyjnฤ…, aby kontynuowaฤ‡ instalacjฤ™.

Jak zainstalowaฤ‡ Perla na Windows

Krok 3: Poniลผej znajdujฤ… siฤ™ rรณลผne pakiety, ktรณre zostanฤ… zainstalowane. Domyล›lnie wybrane zostanฤ… wszystkie. Jedynฤ… rรณลผnicฤ… jest PPM (menedลผer pakietรณw Perla). Jest to narzฤ™dzie dostarczane przez Active Perl do instalowania zewnฤ™trznych moduล‚รณw lub bibliotek Perla w twoim systemie. Kliknij Dalej, aby kontynuowaฤ‡.

Instalowanie Perla na Windows

Krok 4: Sฤ… to rรณลผne typy rozszerzeล„ Perla, ktรณrych moลผna uลผywaฤ‡ w Perlu. Przewaลผnie bฤ™dziemy uลผywaฤ‡ .Pl, .Plx i .Pm dla Perla. Moduล‚y Perla zasadniczo uลผywajฤ… .Pm jako rozszerzenia pliku w odniesieniu do pliku biblioteki. Zaznacz wszystkie opcje i kliknij przycisk Dalej.

Instalowanie Perla na Windows

Krok 5: Kliknij przycisk Instaluj, aby kontynuowaฤ‡ instalacjฤ™.

Instalowanie Perla na Windows

Krok 6: Po zainstalowaniu wykonaj polecenie โ€žPerl โ€“vโ€, aby sprawdziฤ‡, czy Perl zostaล‚ pomyล›lnie zainstalowany w twoim systemie.

Instalacja PERL wล‚ฤ…czona Windows

Jest wiele rzeczy, ktรณre naleลผy omรณwiฤ‡ w celu ustawienia ล›rodowiska Perla zarรณwno w systemie Linux, jak i Windows, poniewaลผ w tej instalacji nie bฤ™dzie wielu plikรณw bibliotek. Musisz je zainstalowaฤ‡ rฤ™cznie. Moลผna je zainstalowaฤ‡ rฤ™cznie za pomocฤ… CPAN (Comprehensive Perl Archive Network) lub PPM, ktรณry dziaล‚a tylko dla okien Perl. Jednak te pliki nie sฤ… obowiฤ…zkowe, aby rozpoczฤ…ฤ‡ kodowanie w Perl.

Oprรณcz tej konfiguracji systemu Windows moลผesz uลผyฤ‡ Windows Nowa funkcja podsystemu Linux w systemie Windows 10 i moลผliwoล›ฤ‡ jej wykorzystania do uruchamiania kodu Perl

Pierwszy program w Perlu

Hello world!

Przykล‚ad Perla: Witaj ล›wiecie

#!/usr/bin/perl -w
#this is just a commentโ€ฆ
print "Hello World";

Nie martw siฤ™, jeล›li nie rozumiesz tego tekstu. Wszystko wkrรณtce siฤ™ wyjaล›ni. Chodลบ i spรณjrz na to wedล‚ug linii:

#!/usr/bin/perl		

To mรณwi Operating System, aby wykonaล‚ ten plik z programem znajdujฤ…cym siฤ™ w /usr/bin/perl. Niektรณre IDE nie potrzebujฤ… tej linii. Jeล›li jest to konieczne, musisz wpisaฤ‡ tutaj ล›cieลผkฤ™ do swojego tล‚umacza. Pamiฤ™taฤ‡! Ta specjalna linia musi znajdowaฤ‡ siฤ™ na poczฤ…tku programu i musi zaczynaฤ‡ siฤ™ od #! uลผywaj ostrzeลผeล„; Jest to kolejne specjalne polecenie, ktรณre kaลผe interpreterowi wyล›wietliฤ‡ wszelkie ostrzeลผenia, np. -w, ktรณre globalnie aktywuje ostrzeลผenia.

print "Hello World";		

Instrukcja drukowania zapisuje tekst na ekranie. ลšrednik na koล„cu linii informuje interpretera Perla, ลผe โ€‹โ€‹instrukcja zostaล‚a zakoล„czona. Na koล„cu kaลผdej instrukcji w kodzie Perla naleลผy umieล›ciฤ‡ ล›rednik. Zwrรณฤ‡ uwagฤ™ na cudzysล‚รณw (โ€ž). Jest to konieczne do wydrukowania instrukcji. Zapisz powyลผszy skrypt jako Firstprog.pl

On Windows

Jeล›li masz zainstalowany Strawberry, moลผesz po prostu kliknฤ…ฤ‡ Uruchom. Moลผesz takลผe uruchomiฤ‡ interfejs wiersza poleceล„ i napisaฤ‡ na konsoli:

C:\> perl path\firstprog.pl		

lub, jeล›li na Twojej ล›cieลผce nie ma pliku perl.exe:

C:\> c:\perl\bin\perl.exe firstprog.pl		

Na Linuksie/Unixie

Wystarczy otworzyฤ‡ terminal i napisaฤ‡:

perl firstprog.pl		

Jeล›li nie moลผesz uruchomiฤ‡ programu, upewnij siฤ™, ลผe masz uprawnienia do jego uruchomienia. Wpisz w Terminalu:

chmod +x firstprog.pl		

Twรณj program jest teraz wykonywalny i gotowy do uruchomienia. Aby wykonaฤ‡ napisz:

./firstprog		

Zainstaluj moduล‚y cpan minus

Moduล‚y to zestawy kodรณw, ktรณre sล‚uลผฤ… do wykonywania zadaล„, ktรณre wykonujฤ… typowe operacje w kilku programach. Jeล›li uลผywasz moduล‚รณw perl, nie musisz przepisywaฤ‡ kodรณw, aby wykonaฤ‡ tฤ™ samฤ… operacjฤ™. Perl moลผe korzystaฤ‡ z takich zewnฤ™trznych bibliotek kodรณw. Jednฤ… z najlepszych bibliotek jest CPAN. Skrรณt ten oznacza Comprehensive Perl Archive Network i zawiera ogromnฤ… liczbฤ™ moduล‚รณw Perl do wykorzystania. Jest to spoล‚ecznoล›ฤ‡ lub sieฤ‡ duลผej liczby programistรณw, ktรณrzy dostarczajฤ… takie moduล‚y. Instalujฤ…c obsล‚ugฤ™ moduล‚รณw CPAN w swoim module Perl, moลผesz korzystaฤ‡ z moduล‚รณw CPAN i uล‚atwiฤ‡ sobie pracฤ™. Wiฤ™kszoล›ฤ‡ moduล‚รณw Perl jest napisana w Perl, niektรณre uลผywajฤ… XS (sฤ… napisane w C), wiฤ™c wymagajฤ… kompilatora C (ล‚atwo jest to skonfigurowaฤ‡ โ€“ nie panikuj). Moduล‚y mogฤ… mieฤ‡ zaleลผnoล›ci od innych moduล‚รณw (prawie zawsze w CPAN) i nie moลผna ich zainstalowaฤ‡ bez nich (lub bez okreล›lonej wersji). Warto dokล‚adnie przeczytaฤ‡ dokumentacjฤ™ dotyczฤ…cฤ… poniลผszych opcji. Wiele moduล‚รณw w CPAN wymaga teraz najnowszej wersji Perl (wersja 5.8 lub nowsza). Zainstaluj cpanminus skrypt do pobierania, rozpakowywania, budowania i instalowania moduล‚รณw z CPAN, aby uล‚atwiฤ‡ instalowanie innych moduล‚รณw (pรณลบniej nam podziฤ™kujesz). Aby zainstalowaฤ‡ Aplikacja cpanminus moduล‚รณw perla, w wierszu poleceล„ wpisz:

cpan App::cpanminus

cpan App::cpanminus Upewnij siฤ™, ลผe masz poล‚ฤ…czenie z Internetem podczas pobierania i instalowania moduล‚รณw Perla.

Instalowanie moduล‚รณw cpan minus

Teraz zainstaluj dowolny moduล‚:

cpan โ€“i <Module_Name>.		

Zobaczmy przykล‚ad instalacji moduล‚u File::Data (jest to interfejs umoลผliwiajฤ…cy dostฤ™p do danych pliku).

Instalowanie moduล‚รณw cpan minus

Zmienna Perla

Teraz porozmawiamy o zmiennych. Moลผesz sobie wyobraziฤ‡ zmienny rodzaj kontenera, ktรณry przechowuje jednฤ… lub wiฤ™cej wartoล›ci. Po zdefiniowaniu nazwa zmiennej pozostaje taka sama, ale wartoล›ฤ‡ lub wartoล›ci zmieniajฤ… siฤ™ w kรณล‚ko.

Istniejฤ… 3 typy zmiennych:

Rodzaje zmiennych w Perlu

Rodzaje zmiennych w Perlu

Najล‚atwiejsze sฤ… skalary i to jest nasz dzisiejszy temat

Zmienna skalarna

Ten typ zmiennej przechowuje pojedynczฤ… wartoล›ฤ‡.

Jej nazwa zaczyna siฤ™ od znaku dolara i identyfikatora Perla (to nazwa naszej zmiennej).

Zmienna skalarna w Perlu

Zmienna skalarna w Perlu

Konwencja nazewnictwa

Jeล›li znasz inne jฤ™zyki programowania, wiesz, ลผe istniejฤ… pewne zasady dotyczฤ…ce nazewnictwa zmiennych. Podobnie Perl ma trzy zasady nazewnictwa skalarรณw.

  1. Wszystkie nazwy skalarne bฤ™dฤ… zaczynaฤ‡ siฤ™ od znaku $. ลatwo jest pamiฤ™taฤ‡ o poprzedzeniu kaลผdej nazwy znakiem $. Pomyล›l o tym jak o $skalarze.
  2. Podobnie jak PHP. po pierwszym znaku $, ktรณry jest specjalny w Perlu, dozwolone sฤ… znaki alfanumeryczne, tj. od a do z, od A do Z i od 0 do 9. Dozwolony jest takลผe znak podkreล›lenia. Uลผyj podkreล›lenia, aby podzieliฤ‡ nazwy zmiennych na dwa sล‚owa. โ€žAle pierwszy znak nie moลผe byฤ‡ liczbฤ…โ€
  3. Mimo ลผe liczby mogฤ… byฤ‡ czฤ™ล›ciฤ… nazwy, nie mogฤ… wystฤ™powaฤ‡ bezpoล›rednio po $. Oznacza to, ลผe pierwszy znak po $ bฤ™dzie albo alfabetem, albo podkreล›leniem. Te pochodzฤ…ce z C/C++ tล‚o powinno byฤ‡ w stanie natychmiast rozpoznaฤ‡ podobieล„stwo. Przykล‚ady

Przykล‚ad Perla:

$var;
$Var32;
$vaRRR43;
$name_underscore_23;

Nie sฤ… to jednak dozwolone nazwy zmiennych skalarnych.

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

Ogรณlna zasada mรณwi, ลผe jeล›li Perl ma tylko jedno z czegoล›, jest to skalar. Skalary moลผna odczytywaฤ‡ z urzฤ…dzeล„ i moลผemy je wykorzystywaฤ‡ w naszych programach.

Dwa typy skalarnych typรณw danych

  1. Numbers
  2. Smyczki

Numbers:

W tego typu danych skalarnych moลผemy okreล›liฤ‡:

  • liczby caล‚kowite, po prostu liczby caล‚kowite, takie jak 2, 0, 534
  • liczby zmiennoprzecinkowe, to liczby rzeczywiste, takie jak 3.14, 6.74, 0.333

Zmienne liczbowe w Perlu

Uwaga: Generalnie interpreter Perla widzi liczby caล‚kowite jak liczby zmiennoprzecinkowe. Na przykล‚ad, jeล›li napiszesz 2 w swoich programach, Perl zobaczy to jako 2.0000

Literaล‚y caล‚kowite:

Skล‚ada siฤ™ z jednej lub wiฤ™kszej liczby cyfr, opcjonalnie poprzedzonych plusem lub minusem i zawierajฤ…cych podkreล›lenia.

Przykล‚ady Perla:

0;
-2542;
4865415484645          #this also can be written with underscores (for clarity) : 4_865_415_484_645

Jak widaฤ‡ โ€“ nie jest to nic specjalnego. Ale uwierz mi, jest to najpopularniejszy rodzaj skalarรณw. Sฤ… wszฤ™dzie.

Literaล‚y zmiennoprzecinkowe:

Skล‚ada siฤ™ z cyfr, opcjonalnie minusa, kropki dziesiฤ™tnej i wykล‚adnika.

Przykล‚ady Perla:

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

Literaล‚y zmiennoprzecinkowe w Perlu

Reprezentacja รณsemkowa, szesnastkowa i binarna:

Jest to alternatywa dla systemu dziesiฤ™tnego. Pozwรณl, ลผe pokaลผฤ™ ci reprezentacjฤ™ รณsemkowฤ…, szesnastkowฤ… i binarnฤ…. Krรณtka tabelka przedstawia wszystkie waลผne informacje na temat tych dziwnych stylรณw:

Reprezentacja Baza Kontynuowano
Oktal 8 0 (zero)
Szesnastkowy 16 0x
Binarna 2 0b

Przykล‚ady Perla:

255;                               # 255 in decimal notation
0377;                                   # 255 in octal notation
0xff;                                   # 255 in hexadecimal notation
0b11111111;                             # 255 in binary notation

Wszystkie te wartoล›ci dla Perla oznaczajฤ… to samo. Perl nie przechowuje wartoล›ci w tym samym formacie. Wewnฤ™trznie przekonwertuje te wartoล›ci szesnastkowe, binarne i รณsemkowe na dziesiฤ™tne.

Przypisanie jest najczฤ™stszฤ… operacjฤ… na skalarze i jest bardzo proste. Perl uลผywa do tego znaku rรณwnoล›ci. Pobiera wartoล›ฤ‡ wyraลผenia z prawej strony i umieszcza tฤ™ wartoล›ฤ‡ w naszej zmiennej.

Spรณjrzmy na przykล‚ady:

$size=15;             # give $size value of 15
$y = -7.78;           # give $y value of -7.78

Co wiฤ™cej, do zmiennej moลผesz wstawiฤ‡ nie tylko liczbฤ™, ale takลผe wyraลผenie.

$z = 6 + 12               # give $z value of 18

Smyczki

Struny: Jest to rรณwnieลผ bardzo prosty typ skalara.

Maksymalna dล‚ugoล›ฤ‡ ciฤ…gu w Perlu zaleลผy od iloล›ci pamiฤ™ci, jakฤ… posiada komputer. Nie ma ograniczeล„ co do rozmiaru ciฤ…gu, ciฤ…gi mogฤ… skล‚adaฤ‡ siฤ™ z dowolnej liczby znakรณw, symboli lub sล‚รณw. Najkrรณtszy ciฤ…g nie zawiera znakรณw. Najdล‚uลผszy moลผe zapeล‚niฤ‡ caล‚ฤ… pamiฤ™ฤ‡ systemu. Programy w jฤ™zyku Perl moลผna pisaฤ‡ w caล‚oล›ci przy uลผyciu 7-bitowego zestawu znakรณw ASCII. Perl pozwala takลผe na dodanie dowolnego 8-bitowego lub 16-bitowego zestawu znakรณw, tzw. znaki inne niลผ ASCII w literaล‚ach ล‚aล„cuchowych. Perl dodaล‚ takลผe obsล‚ugฤ™ Unicode UTF-8.

Rodzaje ciฤ…gรณw w Perlu

Podobnie jak w przypadku liczb, istniejฤ… dwa rodzaje ciฤ…gรณw znakรณw:

  • Literaล‚y ciฤ…gu z pojedynczym cudzysล‚owem
  • Double cytuje literaล‚y ล‚aล„cuchowe

Literaล‚y ciฤ…gu w pojedynczym cudzysล‚owie

Pojedyncze cudzysล‚owy sล‚uลผฤ… do ujฤ™cia danych, ktรณre naleลผy rozumieฤ‡ dosล‚ownie. Krรณtki przykล‚ad i wszystko powinno byฤ‡ jasne:

Przykล‚ady Perla:

#!/usr/bin/perl 
$num = 7;
$txt = 'it is $num';
print $txt;

Wyjล›cie:

to jest liczba dolarรณw

Tutaj ze wzglฤ™du na pojedynczy cudzysล‚รณw wartoล›ฤ‡ $num nie zostaล‚a pobrana, a dosล‚owne znaki โ€ž$โ€, โ€žnโ€, โ€žuโ€ i โ€žmโ€ sฤ… dodawane do wartoล›ci $txt

Double-cytowane literaล‚y ciฤ…gu

Double cudzysล‚owy sฤ… uลผywane do ujmowania danych, ktรณre muszฤ… zostaฤ‡ interpolowane przed przetworzeniem. Oznacza to, ลผe znaki ucieczki i zmienne nie sฤ… po prostu dosล‚ownie wstawiane do pรณลบniejszych operacji, ale sฤ… oceniane na miejscu. Znaki ucieczki mogฤ… byฤ‡ uลผywane do wstawiania nowych linii, tabulatorรณw itp.

Przykล‚ady Perla:

$num = 7; 
$txt = "it is $num"; 
print $txt;

Wyjล›cie:

to jest 7

Tutaj ze wzglฤ™du na podwรณjne cudzysล‚owy wartoล›ฤ‡ $num jest dodawana do wartoล›ci $txt

Double-cudzysล‚owy interpolujฤ… zmienne skalarne i tablicowe, ale nie hasze. Z drugiej strony, moลผesz uลผyฤ‡ cudzysล‚owรณw, aby interpolowaฤ‡ wycinki zarรณwno tablic, jak i haszy.

Tajemniczy \n

Rozwaลผ nastฤ™pujฤ…cy program

Przykล‚ady Perla:

print "hello \n";

Wyjล›cie:

czeล›ฤ‡

Perl nie wyล›wietla tylko โ€žczeล›ฤ‡\nโ€, ale tylko โ€žwitajโ€. Dlaczego? Poniewaลผ '\n' jest znakiem specjalnym i oznacza, ลผe โ€‹โ€‹podczas wyล›wietlania tekstu w programie chcesz przejล›ฤ‡ do nowej linii. wydrukuj โ€žwitaj\n nowฤ… liniฤ™โ€; Nastฤ™pne pytanie โ€“ czy sฤ… jakieล› inne znaki specjalne? Tak, oni sฤ…! Ale nie martw siฤ™ โ€“ tylko kilka. Sprawdลบ poniลผszฤ… tabelฤ™

Skonstruowaฤ‡ OPIS
\n Nowa linia
\r powrรณt
\t Zakล‚adka
\f podawanie ksztaล‚towe
\b Backspace
\a dzwon
\e uciec
\007 dowolna รณsemkowa wartoล›ฤ‡ ASCII (tutaj 007 = dzwonek)
\x7f dowolna wartoล›ฤ‡ szesnastkowa (tutaj 7f = usuล„)
\\ ukoล›nik wsteczny
\ โ€ cudzysล‚รณw
\l nastฤ™pna litera z maล‚ej litery
\L maล‚e litery wszystkie nastฤ™pujฤ…ce po sobie aลผ do \E
\u wielka nastฤ™pna litera
\U wielkie litery wszystkie nastฤ™pujฤ…ce po sobie aลผ do \E
\E Zakoล„cz \L, \U

Wiem, ลผe nie ma โ€žtylko kilkuโ€โ€ฆ Ale uwierz mi, musisz to wiedzieฤ‡

Zmienna ciฤ…gรณw

To ta sama operacja, ktรณrฤ… widzimy w przypisywaniu liczb. Perl pobiera nasz ciฤ…g z prawej strony znaku rรณwnoล›ci i umieszcza ten ciฤ…g w zmiennej.

Przykล‚ady Perla:

$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;

Wyjล›cie:

samouczek315

Jak widaฤ‡, moลผna umieล›ciฤ‡ liczby i ciฤ…gi znakรณw w tych samych zmiennych. Nie ma klasy zmiennych.

ลฤ…czenie ciฤ…gรณw (kropka):

Operator konkatenacji โ€ž.โ€ ล‚ฤ…czy dwa lub wiฤ™cej ciฤ…gรณw znakรณw. Pamiฤ™taj! Jeล›li ciฤ…g znakรณw zawiera cudzysล‚owy, znaki powrotu karetki, ukoล›niki odwrotne, wszystkie te znaki specjalne muszฤ… zostaฤ‡ poprzedzone ukoล›nikiem odwrotnym.

Zmienna Perla โ€žโ€ Przykล‚ady:

#!/usr/bin/perl
$a = "Tom is";
$b = "favorite cat";
$c = $a ." mother's ". $b;
print $c;

Wyjล›cie:

Tomek jest ulubionym kotem mamy

Sznurki

โ€ž$aโ€, โ€ž$bโ€ sฤ… ล‚ฤ…czone i przechowywane w โ€ž$cโ€ za pomocฤ… operatora โ€ž.โ€

Na koล„cuโ€ฆ

Konwersja pomiฤ™dzy Numbers i ciฤ…gi:

Jak wiesz, Perl automatycznie konwertuje liczby na ciฤ…gi znakรณw, gdy jest to potrzebne. Skฤ…d Perl wie, czego potrzebujemy w danej chwili? To proste โ€” wszystko zaleลผy od operatora (pรณลบniej porozmawiamy o operatorach, teraz zaakceptujmy, ลผe jest ich wiele, rรณลผnych dla liczb i ciฤ…gรณw znakรณw). Jeล›li operator oczekuje liczby, Perl uลผyje wartoล›ci jako liczby. Jeล›li operator oczekuje ciฤ…gu znakรณw, Perl uลผyje wartoล›ci jako ciฤ…gu znakรณw. Innymi sล‚owy โ€” nie musisz siฤ™ martwiฤ‡ o tego typu konwersjฤ™. Krรณtki przykล‚ad i wszystko powinno byฤ‡ jasne:

Przykล‚ady Perla:

$string = "43";
$number = 28;
$result = $string + $number;
print $result;

Wyjล›cie:

71

wartoล›ฤ‡ $string jest konwertowana na liczbฤ™ caล‚kowitฤ… i dodawana do wartoล›ci $number.

Wynik dodania, 71, jest przypisywany do $result.

Zasiฤ™g zmiennej โ€“ Modyfikatory dostฤ™pu

Skalar moลผemy zadeklarowaฤ‡ w dowolnym miejscu programu. Ale musisz okreล›liฤ‡ modyfikator dostฤ™pu

Istniejฤ… 3 rodzaje modyfikatorรณw

  1. my
  2. miejscowy
  3. podejล›ciu,

My: Za pomocฤ… tego moลผesz zadeklarowaฤ‡ dowolnฤ… zmiennฤ…, ktรณra jest specyficzna w bloku. tj. w nawiasach klamrowych.

#!/usr/bin/perl 
my $var=5;
if(1)
{ 
my $var_2 =$var;
}
print $var_2;

Brak wyjล›cia

Wynik programu nie bฤ™dzie niczym!

Samouczek PERL dla poczฤ…tkujฤ…cych โ€” kompletny przewodnik

W powyลผszym przykล‚adzie zobaczysz, ลผe zadeklarowano dwie zmienne, jedna znajduje siฤ™ wewnฤ…trz bloku if ($var_2), a druga znajduje siฤ™ poza blokiem If ($var). Zmienna zadeklarowana poza blokiem bฤ™dzie dostฤ™pna dla bloku if, natomiast zmienna zadeklarowana wewnฤ…trz bloku if nie bฤ™dzie dostฤ™pna dla programu zewnฤ™trznego.

Lokalnie: Uลผywajฤ…c tego, moลผemy faktycznie zamaskowaฤ‡ te same wartoล›ci zmiennych do rรณลผnych wartoล›ci bez faktycznej zmiany pierwotnej wartoล›ci zmiennej. Zaล‚รณลผmy, ลผe mamy zmiennฤ… $a, ktรณrej wartoล›ฤ‡ jest przypisana 5. W rzeczywistoล›ci moลผesz zmieniฤ‡ wartoล›ฤ‡ tej zmiennej poprzez ponowna deklaracja tej samej zmiennej przy uลผyciu sล‚owa kluczowego local bez zmiany pierwotnej wartoล›ci zmiennej, ktรณra wynosi 5. Zobaczmy, jak to dziaล‚a na przykล‚adzie.

#!/usr/bin/perl
$var = 5;
{
local $var = 3;
print "local,\$var = $var \n";
}
print "global,\$var = $var \n";

Dane wyjล›ciowe powyลผszego programu bฤ™dฤ… wyglฤ…daฤ‡ w ten sposรณb.

lokalny, $zmienna = 3

globalny, $zmienna = 5

W ten sposรณb moลผemy zmieniฤ‡ wartoล›ฤ‡ zmiennej bez wpล‚ywu na wartoล›ฤ‡ pierwotnฤ….

Our: Po zadeklarowaniu zmiennej z modyfikatorem dostฤ™pu โ€žnaszโ€ moลผna jej uลผywaฤ‡ w caล‚ym pakiecie. Zaล‚รณลผmy, ลผe masz moduล‚ Perla lub pakiet test.pm, ktรณry ma zadeklarowanฤ… zmiennฤ… o zasiฤ™gu nasz. Dostฤ™p do tej zmiennej moลผna uzyskaฤ‡ w dowolnym skrypcie, ktรณry bฤ™dzie korzystaล‚ z tego pakietu.

Jeล›li powaลผnie myล›lisz o programowaniu w Perlu, powinieneล› zaczฤ…ฤ‡ swรณj program od

#!/usr/local/bin/perl

uลผywaj ล›cisล‚ego;

Pomoลผe Ci to pisaฤ‡ lepszy i czystszy kod. โ€žuลผyj ล›cisล‚egoโ€ wล‚ฤ…cza ล›cisล‚ฤ… pragmฤ™, ktรณra sprawi, ลผe zadeklarujesz zmienne za pomocฤ… mojego sล‚owa kluczowego.

Jest to dobra praktyka programistyczna

#!/usr/local/bin/perl
use strict;
$var = 10;
print "$var";

Wynik: bล‚ฤ…d

#!/usr/local/bin/perl
use strict;
my $var = 10;
print "$var";

Wyjล›cie:

10

Tablica Perla

Co to jest tablica Perla?

Tablica to specjalny typ zmiennej, ktรณry przechowuje dane w formie listy; do kaลผdego elementu moลผna uzyskaฤ‡ dostฤ™p za pomocฤ… numeru indeksu, ktรณry bฤ™dzie unikalny dla kaลผdego elementu. W tablicy moลผna przechowywaฤ‡ liczby, ciฤ…gi znakรณw, wartoล›ci zmiennoprzecinkowe itp. Wyglฤ…da to ล›wietnie. Jak wiฤ™c utworzyฤ‡ tablicฤ™ w Perlu? W Perlu moลผna zdefiniowaฤ‡ tablicฤ™ za pomocฤ… znaku โ€ž@โ€, po ktรณrym nastฤ™puje nazwa, ktรณrฤ… chcesz nadaฤ‡. Rozwaลผmy zdefiniowanie tablicy w Perlu.

moja @tablica;

Oto jak definiujemy tablicฤ™ w Perlu; byฤ‡ moลผe zastanawiasz siฤ™, w jaki sposรณb musimy przechowywaฤ‡ w nim dane. Istniejฤ… rรณลผne sposoby przechowywania danych w tablicy. To zaleลผy od tego, jak bฤ™dziesz go uลผywaฤ‡.

my @array=(a,b,c,d);
print @array;

Wyjล›cie:

abcd

To jest tablica zawierajฤ…ca 4 elementy.

Indeks tablicy zaczyna siฤ™ od 0 i koล„czy do maksymalnego zadeklarowanego rozmiaru, w tym przypadku maksymalny rozmiar indeksu wynosi 3.

Przykล‚ad tablicy Perla

Przykล‚ad tablicy Perla

Moลผesz takลผe zadeklarowaฤ‡ tablicฤ™ w powyลผszy sposรณb; jedyna rรณลผnica polega na tym, ลผe przechowuje dane w tablicy, uznajฤ…c biaล‚ฤ… spacjฤ™ za ogranicznik. Tutaj qw() oznacza sล‚owo cudzysล‚owu. Znaczenie tej funkcji polega na wygenerowaniu listy sล‚รณw. Moลผesz uลผyฤ‡ qw na wiele sposobรณw, aby zadeklarowaฤ‡ tablicฤ™.

@array1=qw/a b c d/;
@array2= qw' p q r s'; 
@array3=qw { v x y z};
print @array1;
print @array2;
print @array3;

Wyjล›cie:

abcdpqrsvxyz

Zaล‚รณลผmy, ลผe chcesz przypisaฤ‡ wartoล›ฤ‡ do 5th element tablicy, jak to zrobimy.

$tablica [4] ='e';

Ukล‚ad sekwencyjny

Tablice sekwencyjne to takie, w ktรณrych przechowujesz dane sekwencyjnie. Zaล‚รณลผmy, ลผe chcesz przechowywaฤ‡ 1-10 liczb lub liter alfabetu az w tablicy. Zamiast wpisywaฤ‡ wszystkie litery, moลผesz sprรณbowaฤ‡ czegoล› takiego jak poniลผej โ€“

@numbers= (1..10);
print @numbers;                   #Prints numbers from 1 to 10;

Wyjล›cie:

12345678910

Rozmiar tablicy Perla

Mamy tablicฤ™, ktรณra jest juลผ dostฤ™pna i nie wiesz, jaki jest rozmiar tej tablicy, wiฤ™c jaki jest moลผliwy sposรณb jej znalezienia.

@array= qw/a b c d e/;
print $size=scalar (@array);

Czy moลผemy uzyskaฤ‡ rozmiar tablicy bez uลผycia funkcji? Tak moลผemy.

@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

Wyjล›cie:

5

5

Tablica dynamiczna

Powyลผsza metoda deklarowania tablicy nazywa siฤ™ tablice statyczne, gdzie znasz rozmiar tablicy.

Co to jest tablica dynamiczna?

Tablice dynamiczne to te, ktรณre deklarujesz bez podawania ลผadnej wartoล›ci. Kiedy wiฤ™c dokล‚adnie przechowujemy wartoล›ci w tej tablicy? To proste, przechowujemy je w czasie wykonywania. Oto prosty program do tego.

Do wykonania tego zadania bฤ™dziemy uลผywaฤ‡ wbudowanych funkcji Perla.

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.
}

Wyjล›cie:

To jest

rodzaj dynu

mic

rr

y

Funkcja split dzieli zawartoล›ฤ‡ ciฤ…gu na tablicฤ™ w oparciu o dostarczony ogranicznik. Ta funkcja usunie rรณwnieลผ ogranicznik z ciฤ…gu, w tym przypadku jest to โ€žaโ€;

Push, Pop, shift, unshift dla tablic Perl:

Tych funkcji moลผna uลผywaฤ‡ w Perlu do dodawania/usuwania elementรณw tablicy.

  • Perl Push: dodaje element tablicy na koล„cu istniejฤ…cej tablicy.
  • Perl Pop: usuwa ostatni element z tablicy.
  • Perl Shift: usuwa pierwszy element z tablicy.
  • Perl Unshift: dodaje element na poczฤ…tku tablicy.

Funkcje tablicowe w Perlu

Zobaczmy przykล‚ad, w ktรณrym moลผemy skorzystaฤ‡ z poniลผszych funkcji.

@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";

Wyjล›cie:

1.: pon. wt. ล›r

2. po naciล›niฤ™ciu: pon. wt. ล›r. czw

3. przy zmianie biegรณw: Pt Pon Wt ลšr Czw

4. kiedy pop: piฤ…tek pon. wt. ล›r

5. kiedy zmiana: Pon Wt ลšr

Hashe Perla

Dlaczego potrzebujemy Hasha?

O skalarach i tablicach dowiedzieliล›my siฤ™ juลผ w poprzednich sekcjach.

Co dokล‚adnie robiฤ… skalary? Przechowuje tylko liczby caล‚kowite i ciฤ…gi znakรณw.

Co dokล‚adnie robiฤ… tablice? Jest to zbiรณr skalarรณw, w ktรณrym dostฤ™p do kaลผdego elementu tablicy moลผna uzyskaฤ‡ za pomocฤ… indeksรณw. Ale czy dobrym pomysล‚em jest uลผycie tablicy, gdy masz setki i tysiฤ…ce rekordรณw? Zapomnimy, ktรณry indeks ma jakฤ… wartoล›ฤ‡. Aby przezwyciฤ™ลผyฤ‡ tฤ™ sytuacjฤ™, mamy coล› w rodzaju skrรณtu Perla.

Co to sฤ… hashe?

Hash moลผe rรณwnieลผ zawieraฤ‡ tyle skalarรณw, ile moลผe pomieล›ciฤ‡ tablica. Jedyna rรณลผnica polega na tym, ลผe nie mamy ลผadnego indeksu, mamy raczej klucze i wartoล›ci. Moลผna zadeklarowaฤ‡ skrรณt, zaczynajฤ…c od %, po ktรณrym nastฤ™puje nazwa skrรณtu. Zobaczmy przykล‚ad, jak moลผemy zdefiniowaฤ‡ hash Perla i jak moลผemy odrรณลผniฤ‡ go od tablicy

Rozwaลผmy przykล‚ad trzech osรณb, a ich wiek przedstawiono w tablicy.

@array=('Sainath',23,'Krishna',24,'Shruthi',25);        #This is how an array looks.
print @array;

Wyjล›cie:

Sainath33Krishna24ลšruti25

W ten sposรณb trudno jest okreล›liฤ‡ wiek poszczegรณlnych osรณb, gdyลผ musimy pamiฤ™taฤ‡ zarรณwno lokalizacjฤ™ indeksu imion, jak i wiek wszystkich osรณb. Moลผe to byฤ‡ proste, gdy masz 3 nazwiska, ale gdy masz 1000 lub wiฤ™cej? Znasz odpowiedลบ.

Hashe w Perlu

Moลผemy to pokonaฤ‡ za pomocฤ… skrรณtu.

Przykล‚ad skrรณtu:

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.

Wyjล›cie:

Sainath33Krishna24Shruthi25Sainath33Krishna24Shruthi25

Zadeklarowaliล›my teraz skrรณt, ล›wietnie!! Ale jak uzyskaฤ‡ do niego dostฤ™p lub go wydrukowaฤ‡? Do kaลผdego elementu w haszu naleลผy uzyskaฤ‡ dostฤ™p za pomocฤ… powiฤ…zanego z nim klucza, do ktรณrego zostanie przypisana wartoล›ฤ‡. Zatem istnieje odwzorowanie typu โ€žjeden jedenโ€ pomiฤ™dzy kaลผdym kluczem i wartoล›ciฤ… w haszu.

Aby wydrukowaฤ‡ wiek dowolnej osoby, wystarczy zapamiฤ™taฤ‡ imiฤ™ tej osoby.

print $hash{'Krishna'};          # This how we should access a hash. Key enclosed within {}.

Byฤ‡ moลผe zastanawiaล‚eล› siฤ™, dlaczego uลผyล‚em $hash{KeyName}, pamiฤ™taj, ลผe hash to znowu zbiรณr skalarรณw. Moลผemy wiฤ™c uลผyฤ‡ $, ktรณry reprezentuje skalar, aby uzyskaฤ‡ dostฤ™p do kaลผdego elementu skrรณtu.

Przykล‚ad Hasha w Perlu

Uwaga: kaลผdy klucz w hashu powinien byฤ‡ unikalny, w przeciwnym razie nadpisze twojฤ… wartoล›ฤ‡, ktรณra zostaล‚a wczeล›niej przypisana.

Jak moลผemy przypisaฤ‡ skrรณt do innego skrรณtu? Prosty, taki sam sposรณb jak my

Moลผemy rรณwnieลผ wydrukowaฤ‡ caล‚y skrรณt.

%hash=( 'Tom' => 23);
%newHash=%hash; # Assigning hash to a new hashprint %newHash; 
print %newHash;

Wyjล›cie:

Tom23

Dodaj skrรณty Perla

Jak widaฤ‡, mamy juลผ hash %newHash, a teraz musimy dodaฤ‡ do niego wiฤ™cej wpisรณw.

$newHash{'Jim'}=25;
$newHash{'John'}=26;
$newHash{'Harry'}=27;
print %newHash;

Wyjล›cie:

Jim25John26Harry27

Perl Usuล„ klucz

Moลผesz chcieฤ‡ usunฤ…ฤ‡ wpis ze skrรณtu. W ten sposรณb moลผemy to zrobiฤ‡.

delete $newHash{'Jim'};#This will delete an entry from the hash.

Usuล„ jest wbudowanฤ… funkcjฤ… Perla. Tutaj zobaczymy przykล‚ad przypisania skrรณtu do tablicy.

@array=%newHash;
print "@array";

Uwaga: za kaลผdym razem, gdy drukujesz skrรณt lub przechowujesz skrรณt w tablicy. Kolejnoล›ฤ‡ zawsze moลผe siฤ™ rรณลผniฤ‡. Nie zawsze jest tak samo.

Do tablicy moลผemy przypisaฤ‡ tylko klucze lub wartoล›ci skrรณtu.

@arraykeys= keys(%newHash);
@arrayvalues=values(%newHash);
print "@arraykeys\n";
print "@arrayvalues\n";    # \n to print new line.		

Aby usunฤ…ฤ‡ wszystkie wpisy w hashu, moลผemy bezpoล›rednio przypisaฤ‡ hash do wartoล›ci null.

%newHash=();# Spowoduje to przedefiniowanie skrรณtu bez wpisรณw.

Instrukcje warunkowe Perla

W Perlu moลผemy uลผywaฤ‡ instrukcji warunkowych. Czym zatem sฤ… instrukcje warunkowe? Instrukcje warunkowe to takie, w przypadku ktรณrych faktycznie sprawdzasz, czy w kodzie sฤ… speล‚nione pewne okolicznoล›ci.

Pomyล›l o przykล‚adzie: kupujesz owoce i nie podoba Ci siฤ™ cena przekraczajฤ…ca 100 dolarรณw. Zatem tutaj obowiฤ…zuje zasada 100 dolcรณw.

Perl obsล‚uguje dwa typy instrukcji warunkowych; sฤ… jeล›li i chyba ลผe.

Perl Jeล›li

Jeล›li zostanie wykonany blok kodu, gdy warunek jest speล‚niony.

Instrukcje warunkowe Perla

my $a=5;
if($a==5)
{
   print "The value is $a";
}

Wyjล›cie:

5

Perl, jeล›li jest inaczej

To wyglฤ…da dobrze. Pomyล›lmy o sytuacji, w ktรณrej $a nie wynosi 5.

my $a=10;
if($a==5)
{
    print "The values is $a ---PASS";
}
else
{
    print "The value is $a ---FAIL";
}

Wyjล›cie:

Wartoล›ฤ‡ wynosi 10 โ€” FAIL

W ten sposรณb moลผemy kontrolowaฤ‡ tylko jeden warunek na raz. Czy to ograniczenie? Nie, moลผesz takลผe kontrolowaฤ‡ rรณลผne warunki za pomocฤ… ifโ€ฆ elsifโ€ฆ else.

Perl Inaczej jeล›li

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";
}

Wyjล›cie:

Wykonany blok elsif โ€“ wartoล›ฤ‡ wynosi 5

W powyลผszym przypadku blok elsif zostanie wykonany, poniewaลผ $a jest rรณwne 5.

Mogฤ… zaistnieฤ‡ sytuacje, w ktรณrych zawiodฤ… zarรณwno bloki kodu if, jak i elsif. W tym scenariuszu zostanie wykonany blok kodu else. W rzeczywistoล›ci moลผesz wyeliminowaฤ‡ sprawdzanie kodu else, jeล›li nie chcesz go doล‚ฤ…czaฤ‡.

Perl zagnieลผdลผony jeล›li

W takim przypadku moลผesz uลผyฤ‡ bloku kodu if w jeszcze jednym bloku kodu 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";
    }

Wyjล›cie:

Wewnฤ…trz pierwszego bloku else โ€” wartoล›ฤ‡ wynosi 1

Wykonaj ten sam kod, zmieniajฤ…c wartoล›ฤ‡ $a; reszty moลผesz siฤ™ dowiedzieฤ‡.

Perl Chyba, ลผe

Masz juลผ pomysล‚, co siฤ™ stanie, jeล›li (jeล›li warunek jest prawdziwy, wykona blok kodu). Chyba ลผe jest przeciwieล„stwem if, chyba ลผe blok kodu zostanie wykonany, jeล›li warunek jest faล‚szywy.

my $a=5;
unless($a==5)
{
   print "Inside the unless block --- The value is $a";
}
else
{
   print "Inside else block--- The value is $a";
}

Wyjล›cie:

Wewnฤ…trz pierwszego bloku else โ€” wartoล›ฤ‡ wynosi 1

Zgadnij, jaki bฤ™dzie wynik. Masz racjฤ™!!!!!. Wynikiem bฤ™dzie instrukcja print bloku else. Ze wzglฤ™du na warunek w chyba, ลผe โ€‹โ€‹blok kodu jest prawdziwy, pamiฤ™taj, ลผe blok chyba nie zostanie wykonany tylko wtedy, gdy warunek jest faล‚szywy. Zmieล„ wartoล›ฤ‡ $a i wykonaj kod, zobaczysz rรณลผnicฤ™.

Perl Uลผywanie if

$a= " This is Perl";
if($a eq "SASSDSS"){
print "Inside If Block";
}
else
{
print "Inside else block"
}

Wyjล›cie:

Wewnฤ…trz innego bloku

Uลผywanie, chyba ลผe

$a= " This is Perl";
unless($a eq "SASSDSS"){
print "Inside unless Block";
}
else
{
print "Inside else block"
}

Wyjล›cie:

Wewnฤ…trz, chyba ลผe Block

Pฤ™tle Perla โ€“ Struktury sterujฤ…ce

Perl obsล‚uguje struktury kontrolne podobne do innych jฤ™zykรณw programowania. Perl obsล‚uguje cztery typy struktur kontrolnych for, fore, while i Until. Uลผywamy tych instrukcji do wielokrotnego wykonywania jakiegoล› kodu.

Dla pฤ™tli Perl

Dla bloku kodu bฤ™dzie wykonywany dopรณki warunek nie zostanie speล‚niony. Weลบmy przykล‚ad, jak Perl zapฤ™tla tablicฤ™.

my @array=(1..10);
for(my $count=0;$count<10;$count++)
{
    print "The array index $count value is $array[$count]";
    print "\n";
}

Wyjล›cie:

Wartoล›ฤ‡ indeksu tablicy 0 wynosi 1

Wartoล›ฤ‡ indeksu tablicy 1 wynosi 2

Wartoล›ฤ‡ indeksu tablicy 2 wynosi 3

Wartoล›ฤ‡ indeksu tablicy 3 wynosi 4

Wartoล›ฤ‡ indeksu tablicy 4 wynosi 5

Wartoล›ฤ‡ indeksu tablicy 5 wynosi 6

Wartoล›ฤ‡ indeksu tablicy 6 wynosi 7

Wartoล›ฤ‡ indeksu tablicy 7 wynosi 8

Wartoล›ฤ‡ indeksu tablicy 8 wynosi 9

Wartoล›ฤ‡ indeksu tablicy 9 wynosi 10

Tutaj, w wyraลผeniu for (), zawartych jest wiele instrukcji. Kaลผde z nich ma swoje znaczenie.

for (inicjalizacja; warunek; inkrementacja)

Oto inny sposรณb uลผycia for.

for(1..10)
{
    print "$_ n";
    print "\n";
}

Wyjล›cie:

1n

2n

3n

4n

5n

6n

7n

8n

9n

10n

Perl Foreach

Instrukcja for each moลผe byฤ‡ uลผywana w taki sam sposรณb jak for; gล‚รณwna rรณลผnica polega na tym, ลผe nie mamy w tym przypadku ลผadnej kontroli stanu ani inkrementacji.

Weลบmy ten sam przykล‚ad z foreach Perl.

my @array=(1..10);
foreach my $value (@array)
{  
	print " The value is $value\n";
}

Wyjล›cie:

Wartoล›ฤ‡ wynosi 1

Wartoล›ฤ‡ wynosi 2

Wartoล›ฤ‡ wynosi 3

Wartoล›ฤ‡ wynosi 4

Wartoล›ฤ‡ wynosi 5

Wartoล›ฤ‡ wynosi 6

Wartoล›ฤ‡ wynosi 7

Wartoล›ฤ‡ wynosi 8

Wartoล›ฤ‡ wynosi 9

Wartoล›ฤ‡ wynosi 10

Foreach pobiera kaลผdy element tablicy i przypisuje tฤ™ wartoล›ฤ‡ do $var przy kaลผdej iteracji. Moลผemy rรณwnieลผ uลผyฤ‡ $_ do tego samego.

my @array=(1..10);
foreach(@array)
{
    print " The value is $_ \n"; # This is same as the above code.
}

Wyjล›cie:

Wartoล›ฤ‡ wynosi 1

Wartoล›ฤ‡ wynosi 2

Wartoล›ฤ‡ wynosi 3

Wartoล›ฤ‡ wynosi 4

Wartoล›ฤ‡ wynosi 5

Wartoล›ฤ‡ wynosi 6

Wartoล›ฤ‡ wynosi 7

Wartoล›ฤ‡ wynosi 8

Wartoล›ฤ‡ wynosi 9

Wartoล›ฤ‡ wynosi 10

Wyglฤ…da to dobrze w przypadku dostฤ™pu do tablic. A co z hashami, jak moลผemy uzyskaฤ‡ klucze skrรณtu i โ€‹โ€‹wartoล›ci za pomocฤ… foreach?

Moลผemy uลผyฤ‡ foreach, aby uzyskaฤ‡ dostฤ™p do kluczy i wartoล›ci skrรณtu, zapฤ™tlajฤ…c go.

Pฤ™tla For w Perlu

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $key (keys %hash)
{
print "$key \n";
}

Wyjล›cie:

Mickey

Tomek

Nocnik

Byฤ‡ moลผe zastanawiasz siฤ™, dlaczego uลผyliล›my klawiszy w funkcji foreach(). Klucze to wbudowana funkcja Perla, dziฤ™ki ktรณrej moลผemy szybko uzyskaฤ‡ dostฤ™p do kluczy skrรณtu. A co z wartoล›ciami? Moลผemy uลผyฤ‡ funkcji wartoล›ci, aby uzyskaฤ‡ dostฤ™p do wartoล›ci skrรณtu.

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";
}

Wyjล›cie:

wartoล›ฤ‡ wynosi 24

wartoล›ฤ‡ wynosi 23

wartoล›ฤ‡ wynosi 25

Perl Podczas

Pฤ™tla While w Perlu jest strukturฤ… kontrolnฤ…, w ktรณrej blok kodu bฤ™dzie wykonywany, dopรณki warunek nie zostanie speล‚niony.

Blok kodu zakoล„czy dziaล‚anie tylko wtedy, gdy warunek bฤ™dzie faล‚szywy.

Weลบmy przykล‚ad pฤ™tli Perl While.

Pฤ™tla while w Perlu

Oto problem, ktรณry bฤ™dzie wymagaล‚ wprowadzenia danych przez uลผytkownika i nie zakoล„czy siฤ™, dopรณki liczba nie zostanie podana jako โ€ž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"

Wyjล›cie:

Odgadnij liczbฤ™ od 1 do 10

9

Odgadnij liczbฤ™ od 1 do 10

5

Odgadnij liczbฤ™ od 1 do 10

7

Zgadล‚eล› szczฤ™ล›liwฤ… liczbฤ™ 7

W powyลผszym przykล‚adzie warunek while nie bฤ™dzie speล‚niony, jeลผeli wprowadzimy dane inne niลผ '7'.

Jeล›li zobaczysz, jak dziaล‚a while, blok kodu zostanie wykonany tylko wtedy, gdy warunek za chwilฤ™ bฤ™dzie prawdziwy.

Perl do-while

Pฤ™tla Do while wykona siฤ™ co najmniej raz, nawet jeล›li warunek w sekcji while jest faล‚szywy.

Weลบmy ten sam przykล‚ad, uลผywajฤ…c do while.

$guru99 = 10;
 do {
 print "$guru99 \n";
 $guru99--;
 } 
 while ($guru99 >= 1);
 print "Now value is less than 1";

Wyjล›cie:

10

9

8

7

6

5

4

3

2

1

Teraz wartoล›ฤ‡ jest mniejsza niลผ 1

Perล‚ do

Dopรณki blok kodu nie jest podobny do chyba w instrukcji warunkowej. W tym przypadku blok kodu zostanie wykonany tylko wtedy, gdy warunek w bloku dopรณki nie bฤ™dzie faล‚szywy.

Weลบmy ten sam przykล‚ad, ktรณrego uลผyliล›my w przypadku chwilฤ™.

Oto problem, ktรณry bฤ™dzie wymagaล‚ wprowadzenia danych przez uลผytkownika i nie zakoล„czy siฤ™, dopรณki nie zostanie podana nazwa inna niลผ โ€žsaiโ€.

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 until($name ne 'sai')
 {
    print "Enter any name \n";
    $name=<STDIN>;
    chomp($name);
 }

Wyjล›cie:

Wpisz dowolnฤ… nazwฤ™ Sai

Perl do-aลผ:

Funkcji Do Until moลผna uลผyฤ‡ tylko wtedy, gdy warunek ma byฤ‡ faล‚szywy i powinien zostaฤ‡ wykonany co najmniej raz.

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 do
 {
     print "Enter any name \n";
     $name=<STDIN>;
    chomp($name);
 }until($name ne 'sai');

Wyjล›cie:

Wpisz dowolne imiฤ™ Howard

Wpisz dowolne imiฤ™ Sheldon

Wpisz dowolnฤ… nazwฤ™ Sai

Wykonaj przykล‚adowe kody while, do-while, before i do-until, aby zobaczyฤ‡ rรณลผnicฤ™.

Perl OperaTor

Czym jest Operasล‚up?

Operatory w jฤ™zyku komputerowym oznaczajฤ… akcjฤ™, ktรณrฤ… moลผna wykonaฤ‡ na pewnym zestawie zmiennych lub wartoล›ciach zrozumiaล‚ych dla komputera. Perl wล‚ฤ…czyล‚ wiฤ™kszoล›ฤ‡ Operators z jฤ™zyka C. Perl ma wiele operatorรณw w porรณwnaniu z innymi jฤ™zykami programowania. OperaOperatory te dzielimy na operatory arytmetyczne, logiczne, relacyjne i przypisania.

Arytmetyka Operatory:

Operatorzy arytmetyczni to operatory, ktรณrych moลผna uลผywaฤ‡ do wykonywania podstawowych operacji matematycznych. Te operatory arytmetyczne to operatory binarne, w przypadku ktรณrych potrzebujemy dwรณch argumentรณw, aby wykonaฤ‡ podstawowฤ… operacjฤ™. Moลผemy rรณwnieลผ uลผywaฤ‡ operatorรณw jednoargumentowych do innych podstawowych operacji; rรณลผnicฤ™ moลผna zobaczyฤ‡ w poniลผszych przykล‚adach.

OperaTor OPIS Przykล‚ad

+

Operacja dodawania sล‚uลผฤ…ca do dodawania dwรณch wartoล›ci lub zmiennych

trzymajฤ…c wartoล›ci

$x=5+6; # Lub

$y=6;

$z=$x+$y;

-

Operator odejmowania uลผywany do odejmowania dwรณch wartoล›ci lub zmiennych zawierajฤ…cych wartoล›ci

$x=6-5; # Lub

$y=6;

$z=$x-$y;

*

Operator mnoลผenia uลผywany do mnoลผenia dwรณch wartoล›ci lub zmiennych zawierajฤ…cych wartoล›ci

$x=6*5; # Lub

$y=6;

$z=$x*$y;

/

Operator dzielenia uลผywany do dzielenia dwรณch wartoล›ci lub zmiennych zawierajฤ…cych wartoล›ci

$x=36/6; # Lub

$y=6;

$z=$x/$y;

**

Operator wykล‚adniczy uลผywany do podania wykล‚adnika i pobrania jego wartoล›ci.

Np.: 22 = 43 = 27

$x=5**5; # Lub

$x=4;

$y=2;

$z=$x**$y;

%

Operator modulo uลผywany do uzyskania przypomnienia podczas dzielenia dwรณch wartoล›ci lub zmiennych zawierajฤ…cych wartoล›ci

$x=5%2; # Lub

$x=10;

$y=2;

$z=$x% $y;

++

Operator dodawania unarnego zwiฤ™kszajฤ…cy wartoล›ฤ‡ zmiennej o 1

$x=5;

$x++;

Or

++$x;

-

Operator odejmowania unarnego zmniejszajฤ…cy wartoล›ฤ‡ zmiennej o 1

$x=5;

$xโ€“; # zmniejszenie liczby postรณw

Or

โ€“$x;# wstฤ™pne zmniejszenie

Przykล‚ad wykonania wszystkich powyลผszych operacji.

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");

Wyjล›cie:

Dodanie 10 i 2 daje 12

Pod liczbฤ… 10 i 2 jest 8

Mul 10 i 2 rรณwna siฤ™ 20

Dzielnik 10 i 2 rรณwna siฤ™ 5

Exp 10 i 2 to 100

Mod 10 i 2 to 0

Cesja Operatory:

Operatorzy przypisania po prostu przypisujฤ… wartoล›ci zmiennym, ale jest jeszcze jedna rzecz, o ktรณrej musimy pamiฤ™taฤ‡ โ€“ operatorzy przypisania wykonujฤ… rรณwnieลผ operacje arytmetyczne i przypisujฤ… nowฤ… wartoล›ฤ‡ tej samej zmiennej, na ktรณrej przeprowadzana jest operacja.

OperaTor OPIS Przykล‚ad

+=

Operator dodawania sล‚uลผฤ…cy do dodawania i przypisywania wartoล›ci tej samej zmiennej

$x=4;

$x+=10;

-=

Operator odejmowania sล‚uลผฤ…cy do odejmowania i przypisywania wartoล›ci tej samej zmiennej

$x=4;

$x-=10;

*=

Operator mnoลผenia sล‚uลผฤ…cy do dodawania i przypisywania wartoล›ci tej samej zmiennej

$x=4;

$x*=10;

/=

Operator dzielenia uลผywany do dzielenia i przypisywania wartoล›ci tej samej zmiennej

$x=4;

$x/=10;

** =

Operator wykล‚adniczy uลผywany do uzyskania wykล‚adnika i przypisania wartoล›ci do tej samej zmiennej

$x=4;

$x**=10;

%=

Operator modulo uลผywany do uzyskania przypomnienia podczas dzielenia i przypisania wartoล›ci do tej samej zmiennej

$x=10;

$x%=4;

Przykล‚ad wykonania wszystkich powyลผszych operacji.

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");

Wyjล›cie:

Dodaj = 15

Sub= 10

Mul = 50

Dziaล‚ = 10

Logiczne i relacyjne Operatory:

Perl uลผywa operatorรณw logicznych do porรณwnywania liczb i ciฤ…gรณw znakรณw. Najczฤ™ล›ciej operatory logiczne sฤ… uลผywane w instrukcjach warunkowych.

Logiczne i relacyjne Operatory w Perlu

Logiczne i relacyjne Operatory w Perlu

OperaTor OPIS

==lub rรณwn

OperaTor sล‚uลผy do sprawdzania, czy obie zmienne sฤ… rรณwne

!=Albo nie

OperaTor sล‚uลผy do sprawdzania, czy obie zmienne nie sฤ… rรณwne

> lub gt

OperaTor uลผywany do sprawdzania, czy

A jest wiฤ™ksze niลผ B

<or lt

OperaTor uลผywany do sprawdzania, czy

A jest mniejsze niลผ B.

>=lub ge

OperaTor uลผywany do sprawdzania, czy

A jest wiฤ™ksze lub rรณwne B

<=lub le

OperaTor uลผywany do sprawdzania, czy

A jest mniejsze lub rรณwne B

|| albo albo

OperaTor uลผywany do sprawdzania, czy A lub B trzyma wartoล›ฤ‡

&&albo i

OperaTor uลผywany do sprawdzania, czy A i B trzymajฤ… wartoล›ฤ‡

Weลบmy przykล‚ad, w ktรณrym moลผemy wyjaล›niฤ‡ wszystkie scenariusze.

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");
}

Wyjล›cie:

Prawda โ€” rรณwna siฤ™ 5 i 5

Prawda โ€” nie rรณwna siฤ™ 6 i 7

To prawda โ€” 7 jest wiฤ™ksze niลผ 6

To prawda โ€“ 6 mniej niลผ 7

To prawda โ€“ 6 mniej niลผ 7

To prawda โ€” 7 jest wiฤ™ksze niลผ 6

Przykล‚ady operatorรณw logicznych moลผna znaleลบฤ‡ w dalszych sekcjach.

Specjalne zmienne Perla

Co to sฤ… zmienne specjalne Perla?

Zmienne specjalne w Perlu to te, ktรณre majฤ… pewne z gรณry okreล›lone znaczenie. Zmienne te sฤ… oznaczone prawdziwymi nazwami lub symbolami interpunkcyjnymi. Mamy specjalnฤ… zmiennฤ… dla wszystkich zmiennych obsล‚ugiwanych przez Perl, takฤ… jak specjalne zmienne skalarne, specjalne zmienne Array, specjalne zmienne mieszajฤ…ce. Wiฤ™kszoล›ฤ‡ zmiennych specjalnych, ktรณrych uลผywamy, ma charakter skalarny.

Kiedy chcemy uลผyฤ‡ specjalnej zmiennej z jej nazwฤ…, musimy zaล‚adowaฤ‡ moduล‚ Perla โ€žuse Englishโ€, aby wyraลบnie powiedzieฤ‡ interpreterowi Perla, ลผe โ€‹โ€‹bฤ™dziemy uลผywaฤ‡ specjalnych zmiennych, uลผywajฤ…c jej nazwy.

Skalarne zmienne specjalne

Zmienna OPIS

$_$ARG

Jest to domyล›lna zmienna przechowujฤ…ca bieลผฤ…ce wartoล›ci.

0 USD lub $PROGRAM_NAME

Przechowuje nazwฤ™ pliku skryptu Perla.

$/

Separator rekordรณw wejล›ciowych, ma domyล›lnฤ… wartoล›ฤ‡ โ€ž\nโ€, ktรณra jest znakiem nowej linii

$.

Przechowuje bieลผฤ…cy numer linii odczytywanego pliku

$,

Separator pola wyjล›ciowego, uลผywany gล‚รณwnie przez instrukcjฤ™ print(). Domyล›lnie wartoล›ฤ‡ tej zmiennej jest ustawiona na 0, moลผemy zmieniฤ‡ wartoล›ฤ‡ tej zmiennej.

$\

Wyprowadลบ separator rekordรณw, wartoล›ฤ‡ tej zmiennej bฤ™dzie pusta; moลผemy do tego przypisaฤ‡ dowolnฤ… wartoล›ฤ‡, ktรณra bฤ™dzie uลผywana przez instrukcjฤ™ print() podczas drukowania wyniku.

$#

Ta zmienna jest uลผywana do okreล›lenia formatu wyjล›ciowego podczas drukowania liczb.

$%$FORMAT_PAGE_NUMBER

Przechowuje bieลผฤ…cy numer strony przeczytanego pliku.

$=$FORMAT_LINES_PER_PAGE

Zatrzyma bieลผฤ…cฤ… dล‚ugoล›ฤ‡ strony odczytanego pliku.

$-$FORMAT_LINES_LEFT

Przechowuje wartoล›ฤ‡ liczby wierszy pozostaล‚ych do wydrukowania ze strony.

$~$FORMAT_NAME

Nazwa formatu: Domyล›lnie przechowuje format aktualnie wybranego wyjล›cia jako nazwฤ™ uchwytu pliku.

$^$FORMAT_TOP_NAME

Przechowuje wartoล›ฤ‡ formatu nagล‚รณwka procedury obsล‚ugi pliku, domyล›lnie wartoล›ciฤ… bฤ™dzie _TOP, po ktรณrej nastฤ™puje nazwa uchwytu pliku.

$|$WYJลšCIE_AUTOFLUSH

Wartoล›ฤ‡ domyล›lna wynosi zero; sล‚uลผy ona do oprรณลผniania bufora wyjล›ciowego po kaลผdym zapisie (write) lub wydruku (print).

$$

Bฤ™dzie przechowywaฤ‡ numer uruchomionego procesu interpretera Perla.

$?

Kod stanu: Potok i wywoล‚anie systemowe. Status powrotu wykonanego polecenia.

DOPASOWANIE $&$

Uลผywany w wyraลผeniach regularnych, przechowuje ciฤ…g ostatniego pomyล›lnego dopasowania wzorca.

$`$PREMEC

Uลผywane w wyraลผeniach regularnych, przechowuje ciฤ…g znakรณw poprzedzony ostatnim pomyล›lnym dopasowaniem wzorca.

$'$POMECZ

Uลผywane w wyraลผeniach regularnych, przechowuje ciฤ…g znakรณw, po ktรณrym nastฤ™puje ostatnie pomyล›lne dopasowanie wzorca.

$+$LAST_PAREN_MATCH

Przechowuje ciฤ…g ostatniego nawiasu pasujฤ…cego podczas ostatniego wyszukiwania wzorca.

$

1 dolar, 2 dolar, 3 dolaryโ€ฆ. Przechowuje wartoล›ci wzorca dopasowanego w kolejnoล›ci.

$[

Pierwszy indeks: Array, podciฤ…g.

$]

Wersja Perla.

$โ€

Separator uลผywany dla elementรณw listy, domyล›lnie jest to spacja.

$;

Separator indeksu dolnego uลผywany w tablicach wielowymiarowych

$!

W kontekล›cie numerycznym drukuje numer bล‚ฤ™du. W kontekล›cie ciฤ…gu znakรณw wypisz bล‚ฤ…d.

$@

Przechowuje informacje o bล‚ฤ™dach skล‚adniowych, uลผywane podczas uลผywania funkcji eval().

$<

Przechowuje prawdziwy UID (identyfikator uลผytkownika) procesu uruchamiajฤ…cego skrypt.

$>

Przechowuje efektywny UID procesu uruchamiajฤ…cego skrypt.

$(

Przechowuje prawdziwy GID (identyfikator grupy) procesu uruchamiajฤ…cego skrypt.

$)

Przechowuje efektywny GID procesu uruchamiajฤ…cego skrypt.

$^D$DEBUGOWANIE

Przechowuje bieลผฤ…cฤ… wartoล›ฤ‡ flag debugowania.

$^C

Przechowuje bieลผฤ…cฤ… wartoล›ฤ‡ flagi, gdy uลผywany jest przeล‚ฤ…cznik wiersza poleceล„ โ€“c.

$^F

Maksymalny deskryptor pliku systemowego domyล›lnie jest ustawiony na 2

$^I$INPLACE_EDIT

Przechowuje wartoล›ฤ‡ โ€“i przeล‚ฤ…cznika wiersza poleceล„.

$^M

Specjalnej puli pamiฤ™ci moลผna uลผyฤ‡, gdy skrypt Perla umiera z powodu bล‚ฤ™du braku pamiฤ™ci.

$^O$OSNAZWA

OperaInformacje o systemie sฤ… przechowywane. โ€žLinuxโ€ dla systemรณw Linux, โ€žmswin32โ€ dla Windows systemy.

$^T$CZAS PODSTAWOWY

Czas dziaล‚ania skryptรณw w sekundach.

$^W$OSTRZEลปENIE

Bieลผฤ…ca wartoล›ฤ‡ przeล‚ฤ…cznika โ€“w wiersza poleceล„. Przeล‚ฤ…cznik ostrzegawczy.

$ARGV

Nazwa bieลผฤ…cego pliku, jeล›li uลผyto <>.

Specjalne zmienne tablicowe:

Zmienna OPIS

@INC

Przechowuje listฤ™ ล›cieลผek, gdzie moลผna przeglฤ…daฤ‡ moduล‚y biblioteki Perla lub skrypty podczas wykonywania bieลผฤ…cego skryptu. To @INC jest uลผywane przez uลผycie i wymaga instrukcji sprawdzajฤ…cych te ล›cieลผki dla moduล‚รณw bibliotecznych.

@agawa

Przechowuje przekazane argumenty wiersza poleceล„.

@_

Stosowany w podprogramach, podczas przekazywania parametrรณw do podprogramรณw.

@F

Jest to tablica, w ktรณrej przechowywane sฤ… linie wejล›ciowe podczas automatycznego podziaล‚u โ€“a (uลผywany jest przeล‚ฤ…cznik wiersza poleceล„).

Hashowe zmienne specjalne:

Zmienna OPIS

%INC

Nazwa pliku bฤ™dzie kluczem; wartoล›ci bฤ™dฤ… ล›cieลผkฤ… do tych plikรณw. Uลผywane przez do, use i require.

%ENW

Zmienne ล›rodowiskowe systemu.

%SYG

Signalopiekun.

Wyraลผenie regularne Perla

Co to jest wyraลผenie regularne?

Wyraลผenie regularne Perla jest wystarczajฤ…co silne, aby dopasowaฤ‡ wzorce ciฤ…gu w obrฤ™bie instrukcji lub grupy instrukcji. Wyraลผenia regularne sฤ… najczฤ™ล›ciej uลผywane w analizie tekstu, dopasowywaniu wzorcรณw i wielu innych czynnoล›ciach w zaleลผnoล›ci od wymagaล„. Mamy pewne operatory, ktรณre sฤ… specjalnie uลผywane przez wiฤ…zanie wzorcรณw wyraลผeล„ regularnych =~ i !~, Sฤ… to operatory testowe i przypisania.

Wyraลผenie regularne Operatorsy

Wyraลผenie regularne Operatory w Perlu

Wyraลผenie regularne Operatory w Perlu

  • Perล‚owy mecz โ€” m//
  • Substytut Perla โ€“ s///
  • Transliteracja Perla โ€“ tr///

Zanim przejdziemy dalej, musimy wiedzieฤ‡ kilka rzeczy o wyraลผeniach regularnych; istniejฤ… pewne rzeczy, takie jak znaki Meta, symbole wieloznaczne w skล‚adni Perl Regex.

Zwฤ™glaฤ‡ Znaczenie

\

Specjalne lub cytat

*

Dopasuj 0 lub wiฤ™cej znakรณw

+

Dopasuj 1 lub wiฤ™cej znakรณw

?

Dopasuj 0 lub 1 znak

|

Moลผna go wykorzystaฤ‡ do dopasowania alternatywnych wzorรณw

()

Sล‚uลผy do przechowywania dopasowanego wzoru

[]

Moลผna przekazaฤ‡ zestaw znakรณw. Stosowany szczegรณlnie do cyfr i alfabetรณw.

{}

Sล‚uลผy do podawania liczby czasu, przez jaki moลผna przeprowadziฤ‡ mecz.

^

Poczฤ…tek ciฤ…gu

$

Koniec sznurka

\w

Sล‚uลผy do dopasowywania pojedynczego znaku lub sล‚owa, ktรณre moลผe byฤ‡ alfanumeryczne, w tym โ€ž_โ€

\W

Dopasowuje wszystko inne niลผ alfanumeryczne

\s

Sล‚uลผy do dopasowywania biaล‚ych znakรณw

\S

Dopasowuje wszystko inne niลผ biaล‚e znaki

\d

Dopasuj liczby. Nie wartoล›ci dziesiฤ™tne i wartoล›ci ujemne

\D

Dopasuj wszystko oprรณcz liczb.

\t

Dopasuj przestrzeล„ tabulacji

\n

Dopasuj nowฤ… liniฤ™

Powyลผszy zestaw znakรณw moลผe zostaฤ‡ uลผyty podczas dopasowywania wzorca.

Zobaczmy kilka przykล‚adรณw.

Rozwaลผmy sytuacjฤ™, w ktรณrej uลผytkownik wprowadza jakieล› dane podczas wykonywania skryptu i chcemy sprawdziฤ‡, czy uลผytkownik wprowadziล‚ jakฤ…ล› nazwฤ™ jako dane wejล›ciowe, czy nie. Musimy napisaฤ‡ skล‚adniฤ™ wyraลผenia regularnego, aby wyodrฤ™bniฤ‡ Twoje imiฤ™ i nazwisko i wydrukowaฤ‡ je.

my $userinput="Guru99 Rocks";
if($userinput=~m/.*(Guru99).*/)
{
	print "Found Pattern";
}
else
{
	print "unable to find the pattern";
}

Wyjล›cie:

Znaleziono wzรณr

Tutaj zapisaliล›my wyraลผenie regularne jako /.*(Guru99).*/.* dopasowuje wszystkie znaki w ciฤ…gu. A '.' w Perlu dopasowanie regularne odnosi siฤ™ do dowolnego znaku, ล‚ฤ…cznie ze spacjฤ….

Zobaczmy, jak dokล‚adnie moลผemy skonstruowaฤ‡ wyraลผenie regularne.

Rozwaลผmy przykล‚ad ciฤ…gu wielu sล‚รณw i cyfr oraz symboli specjalnych, takich jak ten โ€žWitam wszystkich, to jest mรณj numer: +91-99298373639โ€;

Regex : /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i

spacja sล‚owa spacja sล‚owa spacja sล‚owa spacja sล‚owa spacja sล‚owa spacja znak specjalny : spacja znak specjalny+cyfry znak specjalny โ€“cyfry.

Mecz Perla Operatorsy

Operatory dopasowania sล‚uลผฤ… do dopasowania ciฤ…gu znakรณw w obrฤ™bie pewnego polecenia lub zmiennej.

my $var="Hello this is perl";
if($var=~m/perl/)
{
	print "true"; 
} 
else
{
	print "False"; 
}

Wyjล›cie:

prawdziwy

Ten maล‚y kod wydrukuje 'true', poniewaลผ dopasowanie wzorca perl identyfikuje ciฤ…g w zmiennej. Zasadniczo Perl przeszukuje tekst podany w // w caล‚ym ciฤ…gu, nawet jeล›li znajdzie go w jednym miejscu, zwrรณci 'true'. Wzorzec moลผe znajdowaฤ‡ siฤ™ w dowolnym miejscu zmiennej. Moลผemy sprรณbowaฤ‡ zastฤ…piฤ‡ =~ przez !~, aby zobaczyฤ‡ rรณลผnicฤ™ miฤ™dzy tymi dwoma operatorami.

Substytucja Perla OperaTor

Tego operatora moลผna uลผywaฤ‡ do wyszukiwania i zastฤ™powania dowolnego znaku znakiem null lub innym znakiem.

my $a="Hello how are you";
$a=~s/hello/cello/gi;
print $a;

Wyjล›cie:

wiolonczela, jak siฤ™ masz

Uwaga: Moลผemy uลผyฤ‡ dowolnego ciฤ…gu dopasowania wzorca, tak jak zrobiliล›my to wczeล›niej w tym operatorze podstawiania. Tutaj uลผyliล›my 'gi', g-globally, i-ignore case.

Tล‚umaczenie Perla OperaTor

Jest to podobne do Podstawiania, ale nie uลผywa ลผadnych wyraลผeล„ regularnych Perla, zamiast tego moลผemy bezpoล›rednio przekazaฤ‡ wartoล›ฤ‡ lub sล‚owo, ktรณre chcemy zastฤ…piฤ‡.

my $a="Hello how are you";
$a=~tr/hello/cello/;
print $a;

Wyjล›cie:

Czeล›ฤ‡, krowo, jesteล›

We/wy pliku Perla

Perl zostaล‚ zaprojektowany do efektywnego manipulowania plikami i operacjami wejล›cia/wyjล›cia. Gล‚รณwnฤ… zaletฤ… Perla jest parsowanie plikรณw i obsล‚uga plikรณw. Istnieje wiele wbudowanych funkcji i operatorรณw uลผywanych podczas obsล‚ugi plikรณw w Perlu.

Zasadniczo operacje na plikach wykonywane za pomocฤ… Perla sฤ… wykonywane przy uลผyciu FILEHANDLE. Musimy zdefiniowaฤ‡ ten FILEHANDLE podczas otwierania pliku do odczytu lub zapisu.

W tym samouczku dotyczฤ…cym skryptu Perla dowiesz siฤ™:

Perl Otwรณrz plik

Plik moลผemy otworzyฤ‡ korzystajฤ…c z funkcji open() dostฤ™pnej w Perlu.

open(FILEHANDLE, "filename or complete path of the file");

Teraz otworzyliล›my plik i teraz pojawia siฤ™ pytanie. Czy to do czytania czy do pisania?

Perl Odczyt pliku i Perl Zapis pliku

Perl ma pewne tryby, ktรณrych naleลผy uลผyฤ‡ do odczytu, zapisu lub doล‚ฤ…czenia pliku.

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");

Kilka przykล‚adรณw odczytu pliku:

Czytanie pliku w Perlu

Zaล‚รณลผmy, ลผe mamy plik Perla o nazwie file.txt i zawiera on kilka linii tekstu. Musimy otworzyฤ‡ ten plik i wydrukowaฤ‡ go.

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;

Spowoduje to wydrukowanie zawartoล›ci pliku na ekranie wyjล›ciowym.

Teraz napiszemy program do tworzenia i zapisywania danych do pliku Perla.

Zapisywanie pliku w Perlu

open(FH,">test.txt");
my $var=<>;
print FH $var;
close FH;

Spowoduje to zapisanie danych wejล›ciowych dostarczonych w czasie wykonywania i utworzenie pliku test.txt, ktรณry bฤ™dzie zawieraล‚ dane wejล›ciowe.

Powyลผszy sposรณb zawsze bฤ™dzie polegaล‚ na utworzeniu pliku o nazwie test.txt i zapisaniu danych wejล›ciowych do pliku; napiszemy to samo, aby doล‚ฤ…czyฤ‡ plik.

Operacja doล‚ฤ…czania pliku w Perlu

open(FH,">>test.txt");
my $var=<>;
print FH $var;
close FH;
Tryby pracy OPIS

<

Czytaj

+<

Czyta i pisze

>

Tworzy, pisze i obcina

+>

Czytaj, pisz, twรณrz i wycinaj

>>

Pisze, doล‚ฤ…cza i tworzy

+>>

Czytaj, pisz, doล‚ฤ…czaj i twรณrz

Teraz musimy zobaczyฤ‡, jak czytaฤ‡, zapisywaฤ‡ i doล‚ฤ…czaฤ‡ pliki, korzystajฤ…c z podstawowych przykล‚adรณw.

Zobaczymy jeszcze kilka przykล‚adรณw i innych funkcji, ktรณre pomogฤ… lepiej zrozumieฤ‡ pliki.

Perl Powiedz

Ta metoda zwrรณci bieลผฤ…cฤ… pozycjฤ™ FILEHANDLER w bajtach, jeล›li okreล›lono inaczej, za pozycjฤ™ uzna ostatniฤ… liniฤ™.

open(FH, "test.pl");
while(<FH>)
{
	$a=tell FH;
	print "$a";
}

Poszukiwanie Perla

Funkcja wyszukiwania jest podobna do wywoล‚ania systemowego fseek. Ta metoda sล‚uลผy do umieszczania wskaลบnika pliku w okreล›lonej lokalizacji poprzez okreล›lenie bajtรณw, po ktรณrych nastฤ™puje poczฤ…tek lub koniec wskaลบnika pliku.

seek FH, bytes, WHENCE;

WHENCE to pozycja wskaลบnika pliku, od ktรณrego naleลผy rozpoczฤ…ฤ‡. Zero ustawi to od poczฤ…tku pliku.

Przykล‚ad: Niech plik input.txt zawiera pewne dane, takie jak โ€žWitam, to jest mรณj ล›wiatโ€.

open FH, '+<','input.txt';
seek FH, 5, 0;    # This will start reading data after 5 bytes.
$/ = undef;
$out = <FH>;
print $out;
close FH;

Wyjล›cie:

to jest mรณj ล›wiat

Odล‚ฤ…czenie Perla

Odล‚ฤ…czenie sล‚uลผy do usuniฤ™cia pliku.

unlink("filename or complete file path");

Obsล‚uga katalogรณw:

Moลผemy takลผe obsล‚ugiwaฤ‡ katalogi, poprzez ktรณre moลผemy obsล‚ugiwaฤ‡ wiele plikรณw.

zobaczmy, jak otworzyฤ‡ katalog. Moลผemy uลผyฤ‡ metod opendir i readdir.

opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler.

while(readdir(DIR)) # loop through the output of readdir to print the directory contents.
{
   print "$_\n";
}
closedir(DIR); #used to close the directory handler.

or

opendir(DIR,"C:\\Program Files\\");
@content=readdir(DIR);
foreach(@content)
{
	print "$_\n";
}
closedir(DIR);

Spowoduje to wydrukowanie wszystkich dostฤ™pnych plikรณw w tym katalogu.

Testy plikรณw Perla i ich znaczenie

-r

Aby sprawdziฤ‡, czy plik/katalog jest czytelny dla bieลผฤ…cego uลผytkownika/grupy

-w

Aby sprawdziฤ‡, czy bieลผฤ…cy uลผytkownik/grupa moลผe zapisaฤ‡ plik/katalog

-x

Aby sprawdziฤ‡, czy plik/katalog jest wykonywalny przez bieลผฤ…cego uลผytkownika/grupฤ™

-o

Aby sprawdziฤ‡, czy plik/katalog jest wล‚asnoล›ciฤ… bieลผฤ…cego uลผytkownika

-R

Aby sprawdziฤ‡, czy plik/katalog jest czytelny dla tego rzeczywistego uลผytkownika/grupy

-W

Aby sprawdziฤ‡, czy plik/katalog moลผe byฤ‡ zapisywany przez tego prawdziwego uลผytkownika/grupฤ™

-X

Aby sprawdziฤ‡, czy plik/katalog jest wykonywalny przez tego prawdziwego uลผytkownika/grupฤ™

-O

Aby sprawdziฤ‡, czy plik/katalog jest wล‚asnoล›ciฤ… tego prawdziwego uลผytkownika

-e

Aby sprawdziฤ‡, czy istnieje nazwa pliku/katalogu

-z

Aby sprawdziฤ‡, czy plik istnieje i ma zerowy rozmiar (zawsze false dla katalogรณw)

-f

Aby sprawdziฤ‡, czy Entry jest zwykล‚ym plikiem

-d

Aby sprawdziฤ‡, czy Entry jest katalogiem

-l

Aby sprawdziฤ‡, czy Entry jest dowiฤ…zaniem symbolicznym

-S

Aby sprawdziฤ‡, czy Entry jest gniazdem

-p

Aby sprawdziฤ‡, czy Wejล›cie jest nazwanym potokiem (โ€žFIFOโ€)

-b

Aby sprawdziฤ‡, czy wpis jest specjalnym plikiem blokowym (jak dysk do montaลผu)

-c

Aby sprawdziฤ‡, czy wpis jest specjalnym plikiem znakowym (jak urzฤ…dzenie we/wy)

-u

Aby sprawdziฤ‡, czy plik lub katalog ma ustawionฤ… wartoล›ฤ‡ setuid

-g

Aby sprawdziฤ‡, czy plik lub katalog ma setgid

-k

Aby sprawdziฤ‡, czy plik lub katalog ma ustawiony bit sticky

-t

Podany uchwyt pliku to TTY (poniewaลผ w przypadku funkcji systemowej isatty() w tym teล›cie nie moลผna przetestowaฤ‡ nazw plikรณw)

-T

Aby sprawdziฤ‡, czy plik wyglฤ…da jak plik โ€žtekstowyโ€.

-B

Aby sprawdziฤ‡, czy plik wyglฤ…da jak plik โ€žbinarnyโ€.

-M

Aby sprawdziฤ‡ wiek modyfikacji (mierzony w dniach) pliku

-A

Aby sprawdziฤ‡ wiek dostฤ™pu (mierzony w dniach) do pliku

-C

Aby sprawdziฤ‡ wiek modyfikacji i-wฤ™zล‚a (mierzony w dniach) pliku

Podprogram Perla

Co to jest podprogram?

Podprogramy sฤ… podobne do funkcji w innych jฤ™zykach programowania. Korzystaliล›my juลผ z niektรณrych wbudowanych funkcji, takich jak print, chomp, chop itp. Moลผemy pisaฤ‡ wล‚asne podprogramy w Perlu. Podprogramy te moลผna zapisaฤ‡ w dowolnym miejscu programu; lepiej jest umieล›ciฤ‡ podprogramy na poczฤ…tku lub na koล„cu kodu.

Podprogram w Perlu

Przykล‚ad podprogramรณw

sub subroutine_name 
{
	Statementsโ€ฆ;    # this is how typical subroutines look like.
}

Skoro juลผ wiemy, jak napisaฤ‡ podprogram, jak uzyskaฤ‡ do niego dostฤ™p?

Musimy uzyskaฤ‡ dostฤ™p do podprogramu lub go wywoล‚aฤ‡, uลผywajฤ…c nazwy podprogramu poprzedzonej symbolem โ€ž&โ€.

sub display
{
	print "this is a subroutine";
}
display();    # This is how we call a subroutine

Przekazywanie parametrรณw i argumentรณw Perla

Podprogramy lub funkcja Perla sฤ… pisane w celu umieszczenia w nich kodu wielokrotnego uลผytku. Wiฤ™kszoล›ฤ‡ kodu wielokrotnego uลผytku wymaga przekazania parametrรณw do podprogramu. Tutaj dowiemy siฤ™, jak przekazywaฤ‡ argumenty do 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.

Wyjล›cie:

3 to przekazana wartoล›ฤ‡

@_ to specjalna zmienna tablicowa, w ktรณrej przechowywane sฤ… argumenty przekazane do podprogramรณw.

Perl Shift

Moลผemy rรณwnieลผ uลผyฤ‡ sล‚owa kluczowego โ€žshiftโ€, ktรณre przesuwa jeden parametr na raz do zmiennej lub $_[0],$_[1]โ€ฆ, ktรณra jest pojedynczym elementem tablicy @_

sub display
{		
my $var=shift;		
print "$var is passed";		
}		
display("hello");

Wyjล›cie:

czeล›ฤ‡, minฤ™ล‚o

Podprogramy sฤ… zwykle uลผywane w programowaniu obiektowym, a takลผe w miejscach, w ktรณrych moลผna umieล›ciฤ‡ wiฤ™cej kodu wielokrotnego uลผytku.

Gล‚รณwnฤ… funkcjonalnoล›ciฤ… podprogramรณw jest wykonanie jakiegoล› zadania i zwrรณcenie wyniku kodu wielokrotnego uลผytku.

Samouczek PERL dla poczฤ…tkujฤ…cych โ€” kompletny przewodnik

Moลผemy zwrรณciฤ‡ wartoล›ฤ‡ z podprogramu za pomocฤ… sล‚owa kluczowego return.

sub add
{
my $a=shift;
my $b=shift;
return($a+$b);
}
my $result=add(5,6);
print $result;

Wyjล›cie:

11

$result bฤ™dzie zawieraล‚ wartoล›ฤ‡ dodanych $a i $b.

Moลผemy takลผe przekazaฤ‡ skrรณty i tablicฤ™ bezpoล›rednio do podprogramu.

sub hash
{
my %hash=@_;
print %hash;
}
%value= ( 1=>'a', 2=>'b');
&hash(%value);

Wyjล›cie:

1a2b

Moลผemy rรณwnieลผ zwrรณciฤ‡ hash lub tablicฤ™.

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;

Wyjล›cie:

Wewnฤ…trz podprogramu 2b1a Po wywoล‚aniu podprogramu 2b1a

Format Perla

Perl ma mechanizm, za pomocฤ… ktรณrego moลผemy generowaฤ‡ raporty. Uลผywajฤ…c tej funkcji, moลผemy tworzyฤ‡ raporty dokล‚adnie tak, jak chcemy, podczas drukowania na ekranie wyjล›ciowym lub w pliku. Prosty format moลผna zapisaฤ‡ za pomocฤ… funkcji printf lub sprintf dostฤ™pnych w Perlu.

printf "%05d\n", 30;

Spowoduje to dodanie zer na poczฤ…tku liczby 30, co spowoduje, ลผe ล‚ฤ…czna liczba cyfr wyniesie 5. Tฤ™ samฤ… zasadฤ™ moลผna zastosowaฤ‡ w przypadku funkcji sprintf.

sprintf "%05d\n", 30; # This will print the same as printf.

Uลผywajฤ…c printf i sprintf, moลผemy uzyskaฤ‡ wiฤ™kszoล›ฤ‡ formatรณw Perla. W przypadku raportรณw bฤ™dzie to trudne do zaimplementowania.

Format Perla

Przykล‚ad raportu:

================================================== =========================
Imiฤ™ Adres Wiek Telefon
================================================== =========================
Krishna Chennai 24 929309242
Shruthi Chennai 24 929309232

Powyลผej znajduje siฤ™ przykล‚ad raportรณw, ktรณre musimy wydrukowaฤ‡ w ten sam sposรณb w Perlu. Moลผna to osiฤ…gnฤ…ฤ‡, uลผywajฤ…c perl printf i perl sprintf. Moลผna to skutecznie zaimplementowaฤ‡, uลผywajฤ…c format.

Format moลผna zadeklarowaฤ‡ w poniลผszy sposรณb.

format FORMATNAME=FORMATLIST.

Tutaj uลผyjemy okreล›lonej metody zapisu, aby wydrukowaฤ‡ dane na ekranie wyjล›ciowym lub w pliku.

symbol OPIS

@

Uลผywany do reprezentowania poczฤ…tku posiadacza pola

>

Prawidล‚owe wyrรณwnanie tekstu

<

Wyrรณwnanie tekstu do lewej

|

Wyล›rodkowanie

#

Numeryczne, jeล›li podano wiele #. Przyjmuje siฤ™ jako komentarz, jeล›li podano pojedynczy #

.

Kropka dziesiฤ™tna

^

Poczฤ…tek uchwytu pola moลผe byฤ‡ rรณwnieลผ uลผyty do multilinii, a takลผe do zawijania sล‚รณw

~

Linia powinna byฤ‡ pusta, jeล›li zmienna jest pusta

@*

Wiele linii.

($name,$addr,$age,$phone)=("krishna","chennai","24","929309242"); 
write;
($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); 
write; 
format STDOUT_TOP= 
=============================================================== 
NAME ADDRESS AGE PHONE 
===============================================================
 . 
format STDOUT= 
@<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< 
$name, $addr, $age, $phone 
.

Wykonaj kod, aby zobaczyฤ‡ wynik.

Uลผywamy symbolu @, aby okreล›liฤ‡ poczฤ…tek posiadacza pola lub ciฤ…gu znakรณw, โ€ž<โ€ kaลผdego znaku.

Uลผywamy STDOUT do drukowania na standardowym wyjล›ciu. Moลผemy to zmieniฤ‡ na obsล‚ugฤ™ plikรณw, ktรณrej uลผywamy do zapisywania danych do pliku.

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

Moลผemy zamieniฤ‡ โ€ž<โ€ na โ€ž>โ€ lub โ€ž|โ€ aby zmieniฤ‡ wyrรณwnanie tekstu. STDOUT_TOP sล‚uลผy do projektowania nagล‚รณwka formatu. Moลผemy rรณwnieลผ uลผyฤ‡ tego samego z procedurฤ… obsล‚ugi plikรณw za pomocฤ… FH_TOP (FH jest procedurฤ… obsล‚ugi pliku). Spowoduje to przesล‚anie formatu do pliku, nad ktรณrym pracujemy NA.

Standardy kodowania Perla

Kaลผdy programista bฤ™dzie miaล‚ wล‚asne poczucie pisania kodu przy uลผyciu okreล›lonych standardรณw; standardy te powinny byฤ‡ na tyle znane, aby inny programista mรณgล‚ zrozumieฤ‡ i wล‚aล›ciwie obsล‚ugiwaฤ‡ kod.

Standardy kodowania w Perlu

Standardy kodowania w Perlu

Pisanie kodu jest proste i ล‚atwe. Problem pojawia siฤ™, gdy trzeba go utrzymaฤ‡ na pรณลบniejszych etapach. Podczas pisania kodu naleลผy przestrzegaฤ‡ wล‚aล›ciwych wytycznych i standardรณw kodowania. Perl definiuje rรณwnieลผ pewne standardy, ktรณre bฤ™dฤ… przydatne dla programistรณw podczas pisania kodu. Zaleca siฤ™ ล‚adowanie moduล‚รณw โ€žstrictโ€ i โ€žwarnings moduleโ€ podczas pisania kodu. Kaลผdy z tych moduล‚รณw ma swoje wล‚asne znaczenie. Strict sprawi, ลผe zadeklarujemy zmiennฤ… przed uลผyciem, a takลผe poinformuje, czy w kodzie wystฤ™puje jakieล› puste sล‚owo. Moduล‚u ostrzeลผeล„ moลผna alternatywnie uลผyฤ‡, przekazujฤ…c opcjฤ™ โ€ž-wโ€ do interpretera Perla w Shebangu. Ostrzeลผenia zostanฤ… wyล›wietlone na ekranie wyjล›ciowym.

#!/usr/bin/perl โ€“w

Poniลผej znajduje siฤ™ kilka list standardรณw.

  • Uลผyj moduล‚u โ€žล›cisล‚eโ€ i โ€žostrzeลผeniaโ€.
  • Usuล„ zmiennฤ…, ktรณra nie jest uลผywana.
  • Nazwy zmiennych powinny byฤ‡ zrozumiaล‚e dla innych uลผytkownikรณw. Np.: $name, @fileData itp.
  • Podczas kodowania skryptu wymagana jest dokumentacja.
  • Nie koduj na staล‚e ลผadnych wartoล›ci, raczej sprรณbuj pobraฤ‡ je dynamicznie lub poproล› uลผytkownika o wprowadzenie w czasie wykonywania. (ลšcieลผka pliku, Nazwy plikรณw).
  • Maksymalizuj ponowne wykorzystanie kodu. Sprรณbuj umieล›ciฤ‡ kod wielokrotnego uลผytku w podprogramach.
  • Oznacza to, ลผe podprogramom naleลผy podawaฤ‡ peล‚ne nazwy.
  • Podprogramy muszฤ… byฤ‡ napisane z odpowiednimi komentarzami i dokumentacjฤ….
  • Zawsze inicjuj zmienne.
  • Zawsze sprawdzaj kody powrotu wywoล‚aล„ systemowych. Otwarcie pliku moลผe nastฤ…piฤ‡ lub nie, kod powrotu wyล›wietli status bล‚ฤ™du, jeล›li plik nie istnieje.

    Np.: otwarty (FH,

  • Podprogram powinien zawsze zwracaฤ‡ wartoล›ฤ‡.
  • Otwรณrz krฤ™cone w tej samej linii.
  • Pojedynczฤ… liniฤ™ BLOK moลผna umieล›ciฤ‡ w jednej linii z krฤ™conymi.
  • Uลผywaj etykiet podczas Pฤ˜TLI, ล‚atwo bฤ™dzie wyjล›ฤ‡ z pฤ™tli, gdy zajdzie taka potrzeba.
  • Uลผyj podkreล›lenia, gdy dล‚ugie frazy sล‚owne sฤ… zapisywane jako nazwa zmiennej lub podprogram.
  • Sprรณbuj uลผyฤ‡ prostego wyraลผenia regularnego podczas kodowania.

Doskonaล‚y przykล‚ad ze standardami kodowania:

#######################################################################
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

Obsล‚uga bล‚ฤ™dรณw Perla

Co to jest wyjฤ…tek?

Wyjฤ…tek to zdarzenie, ktรณre ma miejsce podczas wykonywania programu i powoduje zawieszenie lub zakoล„czenie programu.

Obsล‚uga bล‚ฤ™dรณw

Obsล‚uga bล‚ฤ™dรณw to taka, o ktรณrฤ… kaลผdy programista musi zadbaฤ‡ podczas programowania. Perl udostฤ™pnia takลผe techniki obsล‚ugi bล‚ฤ™dรณw, dziฤ™ki ktรณrym moลผemy przechwyciฤ‡ bล‚ฤ…d i odpowiednio sobie z nim poradziฤ‡.

Obsล‚uga bล‚ฤ™dรณw w Perlu

Obsล‚uga bล‚ฤ™dรณw w Perlu

Istnieje wiele sposobรณw sprawdzania bล‚ฤ™dรณw w programie. Musimy sprawdziฤ‡ kody powrotu funkcji, ktรณrej uลผywamy. Jeล›li potrafimy poprawnie obsล‚uลผyฤ‡ te kody powrotu, wiฤ™kszoล›ฤ‡ bล‚ฤ™dรณw moลผna obsล‚uลผyฤ‡.

Co zwrรณci w przypadku wywoล‚aล„ systemowych?

W przypadku wywoล‚aล„ systemowych status powrotu zostanie zapisany w dwรณch specjalnych zmiennych $? I $!

$! โ€“ Spowoduje to przechwycenie numeru bล‚ฤ™du lub numeru bล‚ฤ™du powiฤ…zanego z komunikatem o bล‚ฤ™dzie.

$? โ€“ Spowoduje to zatrzymanie funkcji system() statusu powrotu.

Uลผywanie operatora Perl lub operatora logicznego

Podczas korzystania z wywoล‚aล„ systemowych do obsล‚ugi bล‚ฤ™dรณw moลผna uลผywaฤ‡ operatorรณw logicznych lub operatorรณw.

ex:

open(FH,"<test.txt");

Spowoduje to otwarcie pliku w trybie odczytu, jeล›li plik istnieje.

Co siฤ™ stanie, jeล›li brakuje pliku?

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

Perla Ewa

Funkcja Eval radzi sobie z bล‚ฤ™dami krytycznymi, bล‚ฤ™dami czasu kompilacji, bล‚ฤ™dami wykonania i tymi bล‚ฤ™dami, ktรณre w pewnym momencie koล„czฤ… kod.

Funkcja Perl Eval moลผe mieฤ‡ blok kodu lub wyraลผenie. Evals uwaลผa wszystko, co jest w nim umieszczone, za ciฤ…g znakรณw.

Rozwaลผmy sytuacjฤ™ wywoล‚ania podprogramu, ktรณry nie jest zdefiniowany w skrypcie. W tej sytuacji skrypt koล„czy siฤ™ stwierdzeniem โ€žniezdefiniowany podprogram &XYZ, bล‚ฤ…d ten moลผna obsล‚uลผyฤ‡ w funkcji eval.

Blok evals ma wiele zastosowaล„; jednym z nich jest potrzeba zaล‚adowania moduล‚u specyficznego dla systemu operacyjnego w czasie wykonywania.

Przykล‚ad: dzielenie przez zero powoduje bล‚ฤ…d krytyczny; aby sobie z tym poradziฤ‡, moลผemy umieล›ciฤ‡ kod w bloku evals.

$a=5; 
$b=0; 
eval 
{ 
 '$result=$a/$b'; 
} 
if($@)
{
 print "$@";    # All the error codes returned by evals will get stored in $@. 
}

Wyjล›cie:

bล‚ฤ…d skล‚adniowy w C:\Users\XYZ\Text.pl linia 8, obok โ€ž)

{โ€œ

Wykonywanie C:\Users\XYZ\Text.pl zostaล‚o przerwane z powodu bล‚ฤ™dรณw kompilacji.

Przykล‚ad: eval przy uลผyciu instrukcji die w Perlu.

sub test 
{ 
die "Dieing in sub test \n"; 
} 
eval 
{ 
test(); 
}; 
print "Caught : $@\n";

Wyjล›cie:

Zล‚apany: ลšmierฤ‡ w podteล›cie

Korzystanie z Perla Sprรณbuj

Perl nie obsล‚uguje blokรณw try, catch i wreszcie kodu, tak jak inne jฤ™zyki programowania. Nadal moลผemy z nich korzystaฤ‡, ล‚adujฤ…c zewnฤ™trzny moduล‚ Perla.

uลผyj Try::Tiny;

Dziฤ™ki temu moลผemy umieล›ciฤ‡ Twรณj kod w bloku try i wychwyciฤ‡ bล‚ฤ…d w bloku ostrzegawczym.

Zamiast $@ uลผytego w eval Try::Tiny uลผywa $_.

# obsล‚uลผ bล‚ฤ™dy za pomocฤ… moduล‚u obsล‚ugi catch

try 
{ 
die "Die now"; 
} 
catch 
{ 
warn "caught error: $_"; # not $@ 
};

Wreszcie uลผywam.

my $y;
try 
{ 
 die 'foo' 
}
finally 
{ 
    $y = 'bar' 
};

try 
{ 
    die 'Die now' 
} 
catch 
{ 
    warn "Returned from die: $_" 
} 
finally 
{ 
    $y = 'gone' 
};

Wyjล›cie:

foo w C:\Users\XYZ\Text.pl linia 4.

W ten sposรณb moลผemy uลผyฤ‡ try, catch i wreszcie.

sprรณbuj { # instrukcja }

zล‚apaฤ‡ {# instrukcja }

w koล„cu { # instrukcja };

Or

try 
{ 
# statement 
} 
finally 
{ 
# statement 
};

Wyjล›cie:

Or

try 
{ 
# statement 
} 
finally 
{ 
# statement 
} 
catch 
{ 
# statement 
};

Wyjล›cie:

Programowanie za pomocฤ… gniazd Perl

Co to jest gniazdo?

Samouczek PERL dla poczฤ…tkujฤ…cych โ€” kompletny przewodnik

Gniazdo to medium, za poล›rednictwem ktรณrego dwa komputery mogฤ… wspรณล‚dziaล‚aฤ‡ w sieci przy uลผyciu adresu sieciowego i portรณw.

Zaล‚รณลผmy, ลผe A (serwer) i B (klient) to dwa systemy, ktรณre muszฤ… wspรณล‚dziaล‚aฤ‡ ze sobฤ… za pomocฤ… gniazd w celu uruchomienia niektรณrych programรณw.

Aby to zaimplementowaฤ‡, musimy utworzyฤ‡ gniazda zarรณwno w A (serwerze), jak i B (kliencie), A bฤ™dzie w stanie odbierajฤ…cym, a B bฤ™dzie w stanie wysyล‚ajฤ…cym.

Serwer):

Tutaj serwer chce otrzymaฤ‡ poล‚ฤ…czenie od B (Klienta) i wykonaฤ‡ pewne zadania, a nastฤ™pnie odesล‚aฤ‡ wynik do B (Klienta). Gdy wykonujemy kod, system operacyjny w A prรณbuje utworzyฤ‡ gniazdo i wiฤ…ลผe jeden port z tym gniazdem. Nastฤ™pnie bฤ™dzie nasล‚uchiwaล‚ od nadawcy, ktรณrym jest B.

B. (Klient).

Tutaj klient chce wysล‚aฤ‡ jakiล› program ze swojego systemu do A (Serwera) w celu przetworzenia. Kiedy wykonujemy kod, system operacyjny w B prรณbuje utworzyฤ‡ gniazdo do komunikacji z A (Serwerem), B musi okreล›liฤ‡ adres IP i numer portu A, do ktรณrego B chce siฤ™ poล‚ฤ…czyฤ‡.

Jeล›li wszystko pรณjdzie dobrze, oba systemy bฤ™dฤ… wspรณล‚dziaล‚aฤ‡ w celu wymiany informacji przez jeden port. Perl obsล‚uguje takลผe programowanie za pomocฤ… gniazd.

Perl ma natywny interfejs API, za pomocฤ… ktรณrego moลผna implementowaฤ‡ gniazda. Aby to uล‚atwiฤ‡, istnieje wiele moduล‚รณw CPAN, za pomocฤ… ktรณrych piszemy programy gniazdowe.

Operacje serwerowe:

  • Utwรณrz gniazdo
  • Powiฤ…ลผ gniazdo z adresem i portem
  • Nasล‚uchuj gniazda na tym adresie portu
  • Zaakceptuj poล‚ฤ…czenia klienta, ktรณry prรณbuje poล‚ฤ…czyฤ‡ siฤ™ przy uลผyciu portu i adresu IP serwera
  • Wykonaj operacje

klientem Operacje:

  • Utwรณrz gniazdo
  • Poล‚ฤ…cz siฤ™ z serwerem, uลผywajฤ…c jego adresu portu
  • Wykonaj operacje

Serwer-klient Operaw Perlu

Gniazdo.io

Jest to jeden moduล‚ do programowania gniazd, ktรณry opiera siฤ™ na programowaniu obiektowym. Moduล‚ ten nie obsล‚uguje typu sieci INET stosowanego w sieciach.

I/O::Socket::INET:

Moduล‚ ten obsล‚uguje domenฤ™ INET i jest zbudowany na IO::Sockets. Wszystkie metody dostฤ™pne w IO::Sockets sฤ… dziedziczone w module INET.

Klient i serwer korzystajฤ…cy z protokoล‚u TCP:

TCP jest protokoล‚em zorientowanym na poล‚ฤ…czenie; bฤ™dziemy uลผywaฤ‡ tego protokoล‚u do programowania gniazd.

Zanim przejdziemy dalej, zobaczmy jak moลผemy utworzyฤ‡ obiekt dla moduล‚u IO::Socket::INET i utworzyฤ‡ gniazdo.

$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";

Nowa metoda w module IO::Socket::INET akceptuje hash jako parametr wejล›ciowy podprogramu. Ten skrรณt jest predefiniowany i musimy jedynie podaฤ‡ wartoล›ci kluczom, ktรณrych chcemy uลผyฤ‡. Istnieje lista kluczy uลผywanych przez ten skrรณt.

Adres rรณwnorzฤ™dny

Adres hosta zdalnego

Host rรณwnorzฤ™dny

Synonim adresu rรณwnorzฤ™dnego

Port rรณwnorzฤ™dny

Zdalny port lub usล‚uga

Adres lokalny

Adres powiฤ…zania hosta lokalnego

localhost

Synonim adresu lokalnego

Port lokalny

Port powiฤ…zania hosta lokalnego

Proto

Nazwa protokoล‚u (lub numer)

Typ

Typ gniazda

Sล‚uchaj

Rozmiar kolejki do odsล‚uchania

Uลผyj ponownie adresu

Ustaw SO_REUSEADDR przed powiฤ…zaniem

Ponowne uลผycie

Ustaw SO_REUSEADDR przed powiฤ…zaniem

Uลผyj ponownie portu

Ustaw SO_REUSEPORT przed powiฤ…zaniem

Nadawanie

Ustaw SO_BROADCAST przed powiฤ…zaniem

Timeout

Wartoล›ฤ‡ limitu czasu dla rรณลผnych operacji

Wielodomowy

Wyprรณbuj wszystkie adresy dla hostรณw wieloadresowych

Blokowanie

Okreล›l, czy poล‚ฤ…czenie bฤ™dzie w trybie blokowania

Serwer.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);

Klient.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);

Uwaga:

W programowaniu gniazd bฤ™dziemy musieli najpierw uruchomiฤ‡ Server.pl, a nastฤ™pnie Client.pl indywidualnie w rรณลผnych wierszach poleceล„, jeล›li dziaล‚amy na hoล›cie lokalnym.

Co to sฤ… moduล‚y i pakiety Perla

Moduล‚y i Pakiety sฤ… ze sobฤ… ล›ciล›le powiฤ…zane i niezaleลผne. Pakiet: Pakiet Perla jest rรณwnieลผ nazywany przestrzeniฤ… nazw i zawiera wszystkie uลผywane unikalne zmienne, takie jak skrรณty, tablice, skalary i podprogramy. Moduล‚: Moduล‚ to zbiรณr kodu wielokrotnego uลผytku, w ktรณrym piszemy podprogramy. Moduล‚y te moลผna zaล‚adowaฤ‡ do programรณw w jฤ™zyku Perl, aby wykorzystaฤ‡ podprogramy zapisane w tych moduล‚ach.

Czym sฤ… moduล‚y Perla?

Standardowe moduล‚y zostanฤ… zainstalowane podczas instalacji Perla w dowolnym systemie. CPAN: Kompleksowy Perl Archive Network โ€“ globalne repozytorium moduล‚รณw Perla. Nasze wล‚asne, dostosowane moduล‚y Perla, ktรณre mogฤ… byฤ‡ napisane przez nas. Zasadniczo moduล‚ zaล‚adowany do dowolnego skryptu wyeksportuje wszystkie swoje zmienne globalne i podprogramy. Podprogramy te moลผna bezpoล›rednio wywoล‚ywaฤ‡ tak, jakby byล‚y zadeklarowane w samym skrypcie. Moduล‚y Perla moลผna pisaฤ‡ z rozszerzeniem .pm do nazwy pliku Ex: Foo.pm. Moduล‚ moลผna napisaฤ‡, uลผywajฤ…c na poczฤ…tku programu polecenia โ€žpakiet Fooโ€.

Podstawowy moduล‚ Perla:

#!/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;

Brak wyjล›cia

Aby skorzystaฤ‡ z tego moduล‚u Perla, musimy umieล›ciฤ‡ go w aktualnie dziaล‚ajฤ…cym katalogu.

Moลผemy zaล‚adowaฤ‡ moduล‚ Perla za pomocฤ… require lub use w dowolnym miejscu kodu. Gล‚รณwnฤ… rรณลผnicฤ… miฤ™dzy wymaganiem a uลผyciem jest wymaganie zaล‚adowanego moduล‚u w czasie wykonywania i uลผywanie ล‚adowaล„ w czasie kompilacji.

#!/usr/bin/perl
require
Arithmetic;
print Arithmetic::add(5,6);
print Arithmetic:: subtract (5,6);

Tutaj, w powyลผszym przykล‚adzie, dostฤ™p do podprogramรณw uzyskujemy przy uลผyciu peล‚nej nazwy moduล‚u.

Dostฤ™p do pakietu moลผemy rรณwnieลผ uzyskaฤ‡ za pomocฤ… โ€žuลผyj arytmetykiโ€.

Eksporter:

Moduล‚ ten posiada domyล›lnฤ… funkcjonalnoล›ฤ‡ importowania 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;

Tablicy @EXPORT moลผna uลผyฤ‡ do przekazania listy zmiennych i podprogramรณw, ktรณre domyล›lnie zostanฤ… wyeksportowane do wywoล‚ujฤ…cego moduล‚.

Tablicฤ™ @EXPORT_OK moลผna wykorzystaฤ‡ do przekazania listy zmiennych i podprogramรณw, ktรณre bฤ™dฤ… eksportowane na ลผฤ…danie, co uลผytkownik musi okreล›liฤ‡ podczas ล‚adowania moduล‚u.

#!/usr/bin/perl 
use 
Arithmetic qw(subtract); 
print add(5,6); 
print subtract (5,6);

Domyล›lnie eksport podprogramu dodawania zostanie wyeksportowany. Metoda Subtract nie zostanie wyeksportowana, jeล›li nie zostanie okreล›lona podczas ล‚adowania moduล‚u.

Programowanie obiektowe w Perlu

W tej sekcji dowiemy siฤ™, jak tworzyฤ‡ moduล‚y obiektowe w Perlu. Najpierw zobaczmy, co to jest za obiekt? Obiekt to instancja, za pomocฤ… ktรณrej moลผemy uzyskaฤ‡ dostฤ™p, modyfikowaฤ‡ i lokalizowaฤ‡ pewne dane w dowolnym module Perla. To nic innego jak sprawienie, ลผe istniejฤ…cy pakiet Perla, zmienne i podprogramy bฤ™dฤ… dziaล‚aฤ‡ jak klasy, obiekty i metody w odniesieniu do innych jฤ™zykรณw programowania.

Utwรณrz klasฤ™

Wiemy juลผ jak stworzyฤ‡ moduล‚y z poprzedniego tematu. Celem klasy jest przechowywanie metod i zmiennych. Moduล‚ Perla bฤ™dzie miaล‚ podprogramy, ktรณre sฤ… metodami. Musimy uzyskaฤ‡ dostฤ™p do tych zmiennych i obiektรณw podprogramรณw.

Konstruktor Perla

Konstruktor w Perlu to metoda, ktรณra wykona i zwrรณci nam referencjฤ™ z nazwฤ… moduล‚u otagowanฤ… do referencji. Nazywa siฤ™ to bล‚ogosล‚awieล„stwem klasy. Uลผywamy okreล›lonej zmiennej do bล‚ogosล‚awienia klasy Perla, ktรณrฤ… jest bล‚ogosล‚awieล„stwo.

#!/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;

Nowa metoda uลผywana jako konstruktor klasy. Konstruktor ten utworzy dla nas obiekt i powrรณci do skryptu wywoล‚ujฤ…cego ten 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";

Tutaj musimy zrozumieฤ‡, w jaki sposรณb obiekt zostaล‚ stworzony. Ilekroฤ‡ prรณbujemy utworzyฤ‡ obiekt dla klasy, musimy uลผyฤ‡ peล‚nej nazwy klasy. Zaล‚รณลผmy, ลผe klasa Perla znajduje siฤ™ w jakimล› pliku lib\Math\Arithmetic.pm. A jeล›li chcemy uzyskaฤ‡ dostฤ™p do tej klasy Perla z katalogu lib, musimy podaฤ‡ caล‚ฤ… ล›cieลผkฤ™ do klasy podczas wywoล‚ywania skryptu.

uลผyj lib::Math::Arithmetic;

my $obj = lib::Math::Arithmetic->new();

W ten sposรณb odbywa siฤ™ tworzenie obiektรณw w Perlu.

@INC:

Skฤ…d skrypt Perla wie, gdzie istnieje moduล‚ biblioteki? Perl zna jedynie bieลผฤ…cy katalog skryptu i ล›cieลผkฤ™ biblioteki wbudowanej w Perl. Ilekroฤ‡ uลผywamy moduล‚u Perla, ktรณry nie znajduje siฤ™ w bieลผฤ…cym katalogu lub ล›cieลผce biblioteki Perla, skrypt zawsze zakoล„czy siฤ™ niepowodzeniem. W przypadku @INC jest to tablica przechowujฤ…ca wszystkie ล›cieลผki katalogรณw, w ktรณrych musi szukaฤ‡ moduล‚รณw Perla. Sprรณbuj wykonaฤ‡ to polecenie i zobacz, jaki bฤ™dzie wynik.

perl โ€“e "print @INC"

To da pewne dane wyjล›ciowe i jest to ล›cieลผka, w ktรณrej bฤ™dฤ… dostฤ™pne moduล‚y lib. Ilekroฤ‡ uลผywamy nowego moduล‚u biblioteki, musimy powiedzieฤ‡ Perlowi, interpreterowi, aby sprawdziล‚ to konkretne miejsce, w ktรณrym dostฤ™pny jest moduล‚ Perla.

push(@INC, "PATH TO YOUR MODULE");

Zrรณb to jako pierwszฤ… liniฤ™ kodu. To powie twojemu tล‚umaczowi, aby spojrzaล‚ na tฤ™ ล›cieลผkฤ™. Lub posล‚ugiwaฤ‡ siฤ™

lib Arithmetic; # List here is your Perl Module location

Destruktor Perla

Destruktor obiektu jest domyล›lnie wywoล‚ywany na koล„cu i przed zakoล„czeniem skryptu. Sล‚uลผy do niszczenia obiektรณw z pamiฤ™ci.


Skrypty powล‚oki PERL V/s

Wprowadzenie do programowania w PERL

  • Programowanie w Perlu nie powoduje problemรณw z przenoล›noล›ciฤ…, co jest czฤ™ste w przypadku uลผywania rรณลผnych powล‚ok w skryptach powล‚oki.
  • Obsล‚uga bล‚ฤ™dรณw jest w Perlu bardzo ล‚atwa
  • Moลผesz ล‚atwo pisaฤ‡ dล‚ugie i zล‚oลผone programy w Perlu ze wzglฤ™du na jego rozlegล‚oล›ฤ‡. Jest to w przeciwieล„stwie do Shell, ktรณry nie obsล‚uguje przestrzeni nazw, moduล‚รณw, obiektรณw, dziedziczenia itp.
  • Shell ma mniej dostฤ™pnych bibliotek wielokrotnego uลผytku. Nic w porรณwnaniu z CPAN Perla
  • Shell jest mniej bezpieczny. Wywoล‚uje funkcje zewnฤ™trzne (polecenia takie jak mv, cp itp. zaleลผฤ… od uลผywanej powล‚oki). Wrฤ™cz przeciwnie, Perl wykonuje poลผytecznฤ… pracฤ™, korzystajฤ…c z funkcji wewnฤ™trznych.

Jak PERL jest wykorzystywany w testowaniu automatycznym

Perl jest szeroko stosowany w automatyce. Moลผe nie jest to najlepszy jฤ™zyk programowania na ล›wiecie, ale najlepiej nadaje siฤ™ do niektรณrych typรณw zadaล„. Porozmawiajmy, gdzie i dlaczego Perl jest uลผywany Testowanie automatyczne.

Testowanie pamiฤ™ci

Testowanie pamiฤ™ci masowej przy uลผyciu Perla

Co to jest przechowywanie? Dane przechowywane w plikach.

Zaล‚รณลผmy, ลผe mamy powiฤ…zany magazyn Przypadek testowy gdzie musimy zapisaฤ‡ dane na jednej partycji, przeczytaj je i sprawdลบ, czy dane sฤ… zapisane poprawnie.

Moลผna to zrobiฤ‡ rฤ™cznie, ale czy tester rฤ™czny moลผe wykonaฤ‡ to samo 10000 razy? To bฤ™dzie koszmar! Potrzebujemy automatyzacji

Najlepszym narzฤ™dziem do automatyzacji wszystkiego, co jest zwiฤ…zane z przechowywaniem, jest Perl ze wzglฤ™du na techniki obsล‚ugi plikรณw, REGEX i wydajne analizowanie plikรณw, ktรณre zajmuje najmniej czasu wykonania w porรณwnaniu do innych jฤ™zykรณw programowania.

Dlaczego musimy przetestowaฤ‡ pamiฤ™ฤ‡ masowฤ…? Pomyล›l o duลผych centrach danych, w ktรณrych dane bฤ™dฤ… stale przepล‚ywaฤ‡ z jednego systemu do drugiego, a tysiฤ…ce rekordรณw bฤ™dzie przechowywanych na sekundฤ™. Testowanie wytrzymaล‚oล›ci takiego mechanizmu przechowywania jest niezbฤ™dne.

Wiele firm, takich jak HP, Dell, IBM a wielu producentรณw serwerรณw uลผywa Perla jako interfejsu do testowania funkcjonalnoล›ci w domenach pamiฤ™ci masowej i sieci. NetApp jest jednฤ… z takich firm, ktรณra caล‚kowicie pracuje nad pamiฤ™ciฤ… masowฤ… i uลผywa jฤ™zyka Perl jako jฤ™zyka programowania do automatyzacji przypadkรณw testowych.

Jeล›li interesuje Ciฤ™ automatyzacja Perla, wskazane byล‚oby zapoznanie siฤ™ z magazynowaniem i sieciฤ… Concepts.

Testowanie serwerรณw i sieci:

Testowanie serwerรณw i sieci przy uลผyciu jฤ™zyka Perl

Testowanie serwerรณw i sieci przy uลผyciu jฤ™zyka Perl

PERL jest szeroko stosowany w monitorowaniu czasu pracy i wydajnoล›ci serwerรณw.

Rozwaลผmy centrum danych, ktรณre ma 100 hostรณw (serwerรณw). Musisz poล‚ฤ…czyฤ‡ siฤ™ z kaลผdym hostem i zdalnie wykonaฤ‡ niektรณre polecenia. Chcesz takลผe ponownie uruchomiฤ‡ system i sprawdziฤ‡, kiedy wrรณci do trybu online.

Rฤ™czne wykonanie tego zadania dla wszystkich 100 hostรณw bฤ™dzie koszmarem. Ale moลผemy to ล‚atwo zautomatyzowaฤ‡ za pomocฤ… Perla

Zaprojektuj kroki, aby osiฤ…gnฤ…ฤ‡ powyลผszฤ… automatyzacjฤ™ przy uลผyciu jฤ™zyka PERL

  1. Pobierz dane wejล›ciowe z pliku dotyczฤ…ce informacji o hoล›cie, takich jak (adres IP, nazwa uลผytkownika i hasล‚o).
  2. Uลผyj Net::SSH2, aby poล‚ฤ…czyฤ‡ siฤ™ z kaลผdym systemem i ustanowiฤ‡ kanaล‚ do wykonywania poleceล„.
  3. Wykonaj zestaw wymaganych poleceล„, np.: ls, dir, ifconfig, ps itp.
  4. Zrestartuj system.
  5. Poczekaj 10 minut, aลผ system siฤ™ uruchomi.
  6. Pinguj system za pomocฤ… moduล‚u Net::Ping i wydrukuj status.

Zakodujemy powyลผszy scenariusz.

Weลบmy plik o nazwie Wejล›cie.txt, ktรณry bฤ™dzie przechowywaฤ‡ peล‚ne informacje o wszystkich hostach, z ktรณrymi musimy siฤ™ poล‚ฤ…czyฤ‡ i wykonaฤ‡ polecenie.

Wejล›cie.txt

Hasล‚o roota 192.168.1.2

Hasล‚o roota 192.168.1.3

192.168.1.4 root root123

HostCheck.pl

use Net::SSH2;
use Net::Ping;
use strict;
use warnings;
my $ping = Net::Ping->new();    # Creating object for Net::Ping
my $SSHObj = Net::SSH2->new();  #Creating object for Net::SSH2
open( FH, "Input.txt" );        # Opening file and placing content to FH
my @hosts = <FH>;
my $ip;
my @ips;
foreach (@hosts)
{
    if ( $_ =~ /(.*)\s+(\w+)\s+(.*)/ )    #Regex to get each info from file
    {
        $ip = $1;
        my $user = $2;
        my $password = $3;
        $SSHObj->connect($ip);
        print "Connecting to host -- $ip --Uname:$user --Password:$password\n";
        my $status = $SSHObj->auth_password( $user, $password );
        print "$status\n";
        die("unable to establish connection to -- $ip") unless ($status);
        my $shell = $SSHObj->channel();
        print "$_\n" while <$shell>;
        $shell->blocking(1);
        $shell->pty('tty');
        $shell->shell();
        sleep(5);
        #Executing the list of command on particular host. Can be any command
        print $shell "ls \n";
        print "$_\n" while <$shell>;
        print $shell "ps \n";
        print "$_\n" while <$shell>;
        print $shell "dir \n";
        print "$_\n" while <$shell>;
        print $shell "init 6\n";    #rebooting the system
        push( @ips, $ip );
    }
}
sleep 600;
foreach (@ips)
{
    if ( $ping->ping($_) )
    {
        print "$_ is alive.\n" if $ping->ping($_);
    }
    else
    {
        print "$_ is not still up --waiting for it to come up\n";
    }
}

Testowanie sieci

Perl nie ogranicza siฤ™ tylko do testowania pamiฤ™ci masowej i sieci. Moลผemy rรณwnieลผ przeprowadzaฤ‡ testy internetowe przy uลผyciu jฤ™zyka PERL. WWW-Mechanizacja to jeden moduล‚ uลผywany do testowanie sieci. Zasadniczo nie uruchamia ลผadnej przeglฤ…darki w celu przetestowania funkcjonalnoล›ci aplikacji internetowych, raczej korzysta z kodu ลบrรณdล‚owego stron HTML.

Moลผemy rรณwnieลผ przeprowadziฤ‡ testy w oparciu o przeglฤ…darkฤ™ za pomocฤ… Selenium IDE, RC, sterownik sieciowy. Perl jest obsล‚ugiwany Selenium.

\N"; #this przechowuje pozostaล‚y ciฤ…g po zakoล„czeniu dopasowania wzorca.
wydrukuj โ€ž

Podsumuj ten post nastฤ™pujฤ…co: