Szybki start w Perlu. Czy masz zainstalowany Perl? Konstrukcje języka Perl

Ukazał się w 1987 r.

Ten język programowania jest bogaty w możliwości pracy z tekstem, co wyznacza jego główny obszar zastosowań - w szczególności manipulację tekstem.

W tym artykule opisano, jak zainstalować środowisko wykonawcze Perla, wybrać narzędzia programistyczne i utworzyć swój pierwszy program. Na końcu tego przewodnika znajdziesz listę zasobów, które pomogą Ci szybko opanować podstawy Perla, a także głębiej poznać ten język.

Perl jest jedynym językiem, w którym programy wyglądają tak samo przed i po szyfrowaniu RSA.

W momencie pisania tego materiału obecna wersja interpreter to 5.22.0. Perl 6 ma zostać wydany w 2015 roku, ale nie jest jeszcze dobrze udokumentowany.

Język programowania Perl zdecydowanie nie jest zalecany jako język do nauki programowania. Jeśli jesteś absolutnie początkujący, lepiej zacząć od czegoś mniej destrukcyjnego dla twojej delikatnej świadomości. A tak na serio, oto co Jon Ribbens miał do powiedzenia na temat tego języka:

PHP to małe zło stworzone przez niekompetentnych nowicjuszy, podczas gdy Perl to duże i podstępne zło stworzone przez wykwalifikowanych, ale pokręconych profesjonalistów.

Swoją drogą, nie powinieneś zaczynać od PHP. Przejdźmy teraz do rzeczy.

Środowisko wykonawcze

Perl jest obecnie oficjalnie wspierany na trzech wiodących platformach: Mac OS X, Unix i Windows. Na dwóch pierwszych z nich preinstalowane jest środowisko wykonawcze Perl, a jego wersję można znaleźć za pomocą komendy perl -v (można pobrać najnowszą wersję), a dla systemów operacyjnych Rodzina Windowsów Interpreter Perla jest dostępny do pobrania na tej stronie. Jako najbardziej popularną zaleca się wybranie ActivePerl (dystrybucja z ActiveState).

Zintegrowane środowisko programistyczne (IDE)

Perl niestety nie jest zbyt popularny wśród twórców środowisk programistycznych, dlatego do wyboru masz tylko niewielką liczbę wyspecjalizowanych narzędzi.

Ojcze, Perl IDE

Wieloplatformowe, lekkie środowisko programistyczne zaprojektowane specjalnie dla Perla i przyjazne dla początkujących. Oprócz tradycyjnego podświetlania składni i autouzupełniania, posiada także wbudowane narzędzia do refaktoryzacji. Nawiasem mówiąc, sam Padre jest napisany w Perlu 5.

Redaktorzy tekstu

Oczywiście, jak w przypadku każdego języka programowania, masz do wyboru ogromną różnorodność wieloplatformowych edytorów tekstu, od wstępnie zainstalowanych notatników po wygodniejsze narzędzia do edycji kodu źródłowego z podświetlaniem składni, autouzupełnianiem i tym podobnymi. W szczególności zwróć uwagę na:

  • KomodoEdit - uproszczona wersja komercyjnego środowiska programistycznego Komodo IDE, opracowanego przez ActiveState (tego samego, który obsługuje dystrybucję ActivePerl), posiada funkcje autouzupełniania, podświetlania składni, wiele kursorów i wskazówki dotyczące dokumentacji;
  • Vim to edytor tekstu, którego interfejs może być nietypowy dla użytkownika systemu Windows; obsługuje podświetlanie składni;
  • Sublime Text to jedno z najlepszych narzędzi do edycji kodu źródłowego z podświetlaniem składni, autouzupełnianiem itp., którego funkcjonalność rozszerza wiele istniejących wtyczek;
  • Notepad++ to lekki edytor tekstu, który oferuje najbardziej poprawne podświetlanie składni po KomodoEdit; Funkcjonalność można rozszerzyć za pomocą wtyczek, ale jest ich sporo specjalnie dla Perla.

KodGround

Ponadto, jeśli chcesz tylko spróbować programowania w Perlu i nie chcesz instalować dodatkowych oprogramowanie do swojego komputera możesz skorzystać z usługi CodeGround, która zapewnia dostęp do środowisk programistycznych online z podstawową funkcjonalnością dla większości języków programowania, w tym Perla.

Pierwsze „Witaj, świecie!” w Perlu

Tradycyjnie proponujemy rozpocząć naukę nowego języka od znanego programu:

Drukuj „Witaj świecie\n”;

Zapisz tę linię w pliku hello.pl i uruchom utworzony przed chwilą program za pomocą polecenia:

Perl hello.pl

Najpierw jednak się tego upewnij pliki wykonywalne Perl jest wśród twoich Zmienne środowiska(zmienne środowiskowe), a także, że wywołujesz perl z folderu z plikiem źródłowym hello.pl. Jeśli się powiedzie, zobaczysz oczekiwany komunikat „Hello, world!”

Gratulacje, zacząłeś pisać w Perlu!

A potem w drodze...

Doskonały samouczek w języku angielskim na temat języka programowania Perl umożliwiający szybki start można znaleźć na stronie tutorialspoint.com. Ponadto istnieje oficjalny zasób szkoleniowy -

Chcę Cię z góry ostrzec, że ten artykuł nie uczyni Cię super programistą PERL, ale dostarczy Ci niezbędnych informacji wstępnych, które pomogą Ci w dalszej nauce tego interesującego języka programowania.

Zdecydowałem się napisać ten artykuł, gdy dowiedziałem się, jak trudno jest „ogarnąć” wszystko, nawet jeśli masz pod ręką jakiś podręcznik do PERL-a. Wszędzie już na samym początku zaczynają się odwoływać do jakichś tajemniczych terminów i poleceń, a ty możesz tylko mrugnąć oczami ze zdziwienia lub (jeśli coś jeszcze rozumiesz) sprawić, żeby te programy działały (nie „tak jak powinny”, ale ogólnie!). Artykuł ten można by nazwać „PERLem dla manekinów”, gdyby obejmował cały materiał, ale tutaj moim celem jest przekazanie Wam jedynie niezbędnych wstępnych koncepcji i, że tak powiem, „przygotowanie Was do dalszych bitew” :). Chociaż jest całkiem możliwe, że w przyszłości „na prośbę pracowników” ten mały artykuł przerodzi się w coś więcej.

A więc... zaczynajmy!

Na początek powiem Ci, że na Twoim komputerze musi być zainstalowany PERL. Wydawałoby się, że ten prosta obsługa niektórym moim znajomym zupełnie to przeoczyło, a potem, po napisaniu prostego programu, długo próbowało go uruchomić... ;) Najbardziej dostępnym pakietem PERL (moim zdaniem) jest ActivePerl, chociaż pakiet ten jest przeznaczony dla Użytkownicy systemu Windows, a jeśli masz UNIX, możesz pobrać coś natywnego z www.perl.com. Tak czy inaczej, zdobędziesz to i zainstalujesz Perla dla siebie (jeśli jeszcze tego nie zrobiłeś). A więc: będziesz miał nowy folder „perl”, ale to nie znaczy, że wszystkie programy muszą się tam znajdować :) Perl, siedząc tam, wykonuje tylko wszystkie Twoje genialne dzieła z rozszerzeniem *.pl i tam, gdzie one same się znajdują zlokalizowany - jeden użytkownik wie :) (prawda dla użytkownicy Windowsa Z zainstalowany pakiet ActivePerl, ponieważ kojarzy pliki *.pl).

Ponieważ Ponieważ artykuł ten jest przeznaczony przede wszystkim dla użytkowników systemu Windows, czuję się zobowiązany poinformować, że w przypadku programów uruchamianych w tym systemie operacyjnym nie jest konieczne uruchamianie każdego programu linią:

#!/usr/bin/perl

Rzecz w tym, że ten język został stworzony w oparciu o system operacyjny UNIX i próbują przekazać nam tę linię jako „dziedzictwo” ze swojego systemu operacyjnego. Należy jednak pamiętać, że na serwerze (jeśli zdecydujesz się na przesyłanie tam swoich programów) może być również zainstalowany system UNIX.

Teraz trochę o sposobie pisania. Radzę zacząć używać prostego notatnika, aby zapamiętać wszystkie polecenia i składnię programowania. W przyszłości można używać jakiegoś edytora, ale to już nie jest zabawne :), a jeszcze bardziej niepożądane dla tych, którzy dopiero zapoznają się z tym językiem programowania i programowaniem w ogóle.

Prawie wszystkie tutoriale dotyczące tego języka zaczynają się od najprostszego programu, który wygląda mniej więcej tak:

print("Witaj, ŚWIECIE!\n");

Część z Was zapewne skopiowała już powyższy program do swojego pliku i zauważyła, że ​​otwiera się on szybko i równie szybko zamyka. Wynika to z faktu, że program jest programem i po jego wykonaniu natychmiast się zamknie, dlatego dodaj do programu kolejną linię o następującej treści:

Ostatecznie wszystko będzie wyglądać tak:

print("Witaj, ŚWIECIE!\n"); ;

Dla niewtajemniczonych nie wygląda to na takie proste... Nawet trochę przerażające... Ale to tylko dla niewtajemniczonych, tak naprawdę wszystko nie może być prostsze! :) Nie możesz w to uwierzyć? Udowodnię to teraz. Po pierwsze, musisz wiedzieć, że print to polecenie, które wyprowadza informacje na standardowe wyjście STDOUT (STanDart OUT lub prościej wyjście monitora). Po drugie, niezrozumiałość w postaci \n to przejście do nowej linii, ale nie do programu, jak niektórzy mogliby się obawiać, ale do informacji na ekranie, tj. gdybyś miał kontynuować tekst ujęty w cudzysłów, to po tym znaku zostałby on wydrukowany Nowa linia. A jeśli chcesz użyć ukośnika odwrotnego (shels:) w samym tekście, musisz umieścić przed nim kolejny ukośnik. Na przykład:

wydrukuj „\a”; #Polecenie, po którym Perl #wyśle ​​sygnał do SPICERprint "\\a"; #Perl po prostu wypisze \a

W takim razie chcę cię uszczęśliwić: nawiasy nie są potrzebne :) Ich użycie zależy wyłącznie od twojego nastroju, choć w instrukcjach jest napisane, że to podobno pomaga podświetlić tekst w programie. W sumie - komu bardziej się to podoba... Jak się już pewnie domyślacie, cudzysłowy są potrzebne do ujęcia w nich tekstu, zatem pozostają dwa niejasne punkty. Zanim jednak się nad nimi zastanowię, uważam, że konieczne jest wyjaśnienie, jakie informacje istnieją w Perlu. Podstawową jednostką informacji w Perlu jest skalar, tj. osobna wartość przechowywana w osobnej zmiennej.

$a = "Witaj, świecie!"; #Przypisz tekst do zmiennej $a $b = 777; #Przypisz zmiennej $b jakąś liczbę

Zmienne te przechowują ciągi, liczby i odniesienia. W takim przypadku konieczne jest zrozumienie różnicy między liczbami jako takimi a liczbami zawartymi w ciągu znaków.

$abc = "123"; #Numer w linii $123 = 123; #Numer jako taki

Jeśli potrzebujesz liczby do obliczeń, po prostu nie używaj podwójnych cudzysłowów.

Średnik na końcu każdej linii to tak naprawdę... koniec linii, co oznacza, że ​​możesz napisać cały program w jednej linii, ale szkoda nam tych linii czy coś :) Jest wyjątek od powyższego : znak # wskazuje, że wszystko, co znajduje się w wierszu po nim, jest komentarzem i nie ma już związku z programem. Znak diamentu jest domyślny lub mówi w jasnym języku- standardowe wejście z monitora (wyjaśnię: na monitorze pojawia się żądanie, a ty wpisujesz oczywiście z klawiatury. Następnie naciskasz enter i wpisana wartość jest już w zmiennej Perla, jeśli została ustawiona ). Cały trik z dodaniem tego diamentu w naszym przypadku polega na tym, że będzie on pytał cię o wprowadzenie tych danych, dopóki nie naciśniesz przycisku „Enter”, a ponieważ program nie wskaże, co zrobić z tym wejściem, Perl po prostu o tym zapomni i uznać nasz program za zakończony. W wyniku wykonania tego programu ty i ja zobaczymy na naszych monitorach tekst Witaj, świecie!. .

Teraz skomplikujmy trochę nasz program:

print "wpisz swoje imię: "; $nazwa = ; wydrukuj „cześć $imię!”; ;

Powinieneś zrozumieć, że programy są wykonywane linia po linii, tj. najpierw pierwsza linijka, potem druga itd.

Tak więc w pierwszym wierszu jesteśmy proszeni o podanie nazwy użytkownika. W drugiej linii wczytujemy go do zmiennej $name. Jak wspomniano, $name jest zmienną skalarną Perla rozpoczynającą się od znaku dolara. Patrząc w przyszłość, powiem Ci, że oprócz zmiennych zaczynających się od dolara, istnieją również tablice (@array), skróty (%hash) i kilka innych typów, o których jest za wcześnie, aby o nich mówić. Pomiędzy zmienną a rombem zachodzi równość, co oznacza, że ​​wynik zapytania przypisujemy do zmiennej. W trzeciej linii wypisujemy słowo hello, a po nim wypisujemy to, co zostało zapisane w zmiennej $name. W naszym przypadku jest to nazwa, o podanie której prosiliśmy.

Spójrzmy na inną zabawę, w której powiem Ci, co możesz zrobić ze zmiennymi... Możesz z nimi zrobić WSZYSTKO! I nie jest to przesada. Na przykład jest to możliwe:

$a = 3; $b = 4; $c = $a+$b; #Dodaj dwie zmienne i #przypisz je do trzeciej print $c; # Wydrukuj wynikową liczbę print $a+$b; # to samo, tylko bez # angażowania trzeciej zmiennej

Mam nadzieję, że wszystko jest jasne... W międzyczasie niektórzy to zrozumieją, napiszemy program, który będzie wykonywał polecenia dir DOS-u. Dla tych, którzy nie wiedzą, dir to polecenie wyświetlające zawartość katalogu, w którym się znajdujesz.

$dos = `katalog`; wydrukuj $dos; ;

Program ten wczytuje do zmiennej $dos wynik wykonania polecenia dir, który jest ujęty w cudzysłów (gdyby to były proste cudzysłowy, to nie byłoby to polecenie, tylko słowo) i następnie ten właśnie wynik wyświetla na monitorze .

Teraz, że tak powiem, wróćmy do naszych owiec, a raczej na razie tylko do owiec :) Dowiedzieliśmy się, jak wyświetlić potrzebny tekst na ekranie, otrzymać informacje od użytkownika, a także dowiedzieliśmy się, że polecenia DOS-u z tyłu cudzysłowy zostaną wykonane jako polecenia DOS :) Czas napisać program, który nie będzie żądał niczego więcej niż te same polecenia

print "wprowadź polecenie: "; chmod($com =); wydrukuj `$com`; ;

Ze względów bezpieczeństwa zdecydowanie nie polecam wpisywać komendy FORMAT, zgadnijcie dlaczego :) Wśród nowości warto wyróżnić pojawienie się komendy chmod(). Polecenie to usuwa znak nowej linii \n z informacji, które otrzymujemy w żądaniu, które domyślnie tam się znajdują. To, co znajduje się w drugim wierszu, jest skróconą wersją dwóch wierszy:

Zyskujemy dzięki temu tylko kilka postaci, ale i tak jest miło :)

W tym momencie uważam, że wykonałeś pierwsze kroki i jesteś gotowy, aby kontynuować ciernistą ścieżkę nauki Perla.

Artykuł ten został napisany z myślą o osobach, które z powodu niemożliwych do pokonania okoliczności pilnie potrzebują przestudiowania Perły. Dla mnie ta okoliczność była taka, że ​​mój komputer stał się serwerem WEB, a ja odpowiednio zostałem mistrzem WEB. Zwyczajem jest uczenie się na błędach i doświadczeniach innych ludzi, dlatego zwracam uwagę na moje doświadczenia związane ze studiowaniem Pearl.

Od razu trzeba wyjaśnić, dla kogo to wszystko jest napisane. Jeśli Twój serwer działa na platformie UNIX, to ja powinienem przeczytać Twój artykuł. Mam zainstalowaną stację roboczą Windows NT 4.0 (RUS) z dodatkiem Service Pack 3. Kiedy przyszedł czas na zrobienie serwera WEB z mojego komputera, rzuciłem się do wbudowanych usług hosta WEB, ale szybko zdałem sobie sprawę, że mi się to nie podoba (Dlaczego?). I wtedy pewna życzliwa osoba doradziła instalację Xitami WEB Server firmy iMatix Corporation (http://www.imatix.com/), który jest nadal dostępny.

Jeśli chodzi o samą Pearl, sprawa jest nieco bardziej skomplikowana. Po przeszukaniu różnych serwerów Perla (www.perl.org, www.perl.com) dowiedziałem się, że istnieje tak wiele wersji Perla, że ​​dość trudno jest wybrać coś konkretnego. Jednocześnie nie ma nigdzie jasnych zaleceń dotyczących wyboru tej czy innej wersji. Po wypróbowaniu prawie wszystkich wersji dla systemu Windows wybrałem Active Perl (http://www.activestate.com/).

Dla osoby rozpieszczanej przez wszelkiego rodzaju Windowsy i Delphi pisanie programów w Perlu jest dość niezwykłe, dlatego zdecydowanie polecam od razu zainstalować Perl Builder. Można go pobrać na stronie www.solutionsoft.com. Była tam trzydziestodniowa wersja Demo.

Cóż, myślę, że czas przejść od razu do rzeczy. Ogólnie skrypt Pearl, jak każdy inny program, działa w następujący sposób:

  1. odbiera dane
  2. przetwarza dane
  3. daje rezultaty

Dane do skryptu możesz przesłać dwiema metodami – GET i POST. Różnica między nimi polega na tym, kiedy za pomocą GET-a dane stale wiszą w pasku adresu przeglądarki, na przykład:

Httр://treagraf.tasur.edu.ru/cgi-bin/price.pl?Category=POWER&Description=varta

W tym przypadku dane pobiera skrypt B_price.pl Zmienna środowiskowa ZAPYTANIE-STRING.

$data=$ENV("QUERY_STRING");

W przypadku metody POST dane przekazywane są na standardowe wejście skryptu. Długość bloku danych jest zapisywana w zmiennej CONTENT_LENGTH:

Odczyt(STDIN,$dane,$ENV("CONTENT_LENGTH"));

Teraz te dane muszą zostać przetłumaczone na strawną formę, ponieważ są zakodowane.

Standardowa konwencja polega na zastępowaniu spacji znakami plus, a następnie kodowaniu pozostałych nieprawidłowych znaków przy użyciu kodów ASCII w formacie szesnastkowym, poprzedzonych znakiem (%). Przykład:

Http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl?Category=%C2%E8%E4%E5%EE&Description=%E0%E1%E2%E3

To znaczy:

Http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl?Category=Video&Description=abvg

Lepiej jest samodzielnie zdekodować ciąg zapytania po raz pierwszy. Na pytanie „jak?” Jest wiele odpowiedzi, których nie ma sensu przepisywać. Podam tylko krótki przykład:

Zastąp znaki (+) spacjami

$zapytanie = ~ s/\+/ /g;

Następnie zastępujemy wszystkie kombinacje znaku (%), po którym następują cyfry szesnastkowe, odpowiednimi Znak ASCII

$zapytanie =~ s/%((2))/pack("C", szesnastkowo($1))/eg;

Używam tego, co oferuje Perl Builder:

#! E:\perl5\bin\perl # wywołaj procedurę pobierania danych $Category = $field("Category"); # pobierz dane z pola Kategoria $Opis = $field("Opis"); # pobierz dane z pola Opis $Page = $field("Strona"); # pobierz dane z pola Strona

Na końcu skryptu umieszczamy podprogram umożliwiający „przejrzysty” odczyt danych.

Sub GetFormInput ( (*fval) = @_ if @_ ; lokalny ($buf); if ($ENV("REQUEST_METHOD") eq "POST") ( read(STDIN,$buf,$ENV("CONTENT_LENGTH")) ; ) else ( $buf=$ENV("QUERY_STRING"); ) if ($buf eq "") (zwróć 0 ; ) else ( @fval=split(/&/,$buf); foreach $i (0 . $#fval)( ($nazwa,$val)=split (/=/,$fval[$i],2); $val=~tr/+/ /; $val=~ s/%(.. )/pack("c",hex($1))/ge; $name=~tr/+/ /; $name=~ s/%(..)/pack("c",hex($1))/ ge; if (!definiowane($pole($nazwa))) ( $pole($nazwa)=$val; ) else ( $pole($nazwa) .= ",$val"; #jeśli chcesz dokonać wielokrotnego wyboru aby dostać się do tablicy zmień na: #$field($name) .= "\0$val"; ) ) ) return 1; )

Drugi etap skryptu – przetwarzanie danych – zależy wyłącznie od Ciebie. Sprawdź otrzymane dane pod kątem poprawności, zapisz je do pliku, rób co chcesz.

Na koniec należy przekazać pewne wyniki przeglądarce klienta, aby przeglądarka wyświetlała je poprawnie. Oznacza to, że musisz wyświetlić wyniki w formacie HTML. Odbywa się to po prostu: (można to również zrobić na różne sposoby)

Drukuj „Typ zawartości: tekst/html”, „/n/n”; #wymagany wydruk linii "

W polu Kategoria wpisałeś: ", $Kategoria, "

To wszystko dotyczy skryptów, które odbierają dane z formularza na stronie HTML. W tym przypadku strona z formularzem jest osobna, skrypt jest osobny. Możesz uczynić go piękniejszym i wygodniejszym: połącz stronę i skrypt w jedną całość. W tym celu skrypt jest napisany według następującego schematu:

  1. Po pierwszym uruchomieniu skrypt rysuje stronę HTML z formularzem i linkiem do siebie w tagu ACTION. O pierwszym uruchomieniu decyduje brak danych wejściowych.
  2. Jeśli istnieją dane wejściowe, to je otrzymujemy, przetwarzamy i generujemy wyniki.

#! E:\perl5\bin\perl if (($ENV("QUERY_STRING") eq "") lub ($ENV(CONTENT_LENGTH)=0)) ( # wygeneruj stronę z formularzem ) else (# odbierz dane, przetwórz i wypisz wynik)

Księga gości

Ogólny algorytm księgi gości wygląda następująco:

1. Jeżeli odwiedzający chce dokonać wpisu w księdze to
1.1 Pobieranie danych
1.2 Zapisz je do pliku lub bazy danych
1.3 Dziękujemy HTML i sugerujemy przeczytanie innych wpisów
2. Jeśli odwiedzający chce zapoznać się z wpisami w księdze, to
2.1 Odczyt rekordów z pliku lub bazy danych
2.2 Pięknie je wyświetlamy w formacie HTML

Dla ułatwienia sformatowałem punkty 1 i 2 za pomocą osobnych skryptów, odpowiednio add_guestbook.pl i read_guestbook.pl. Wiadomości z księgi gości są przechowywane w pliku tekstowym linia po linii, tj. dla każdego rekordu jest linia. Ma to na celu ułatwienie odczytania tego pliku. Przykład jednego wpisu:

Sobota 5 grudnia 13:31:20 1998&Natasha&student&Dobry&Dobry na początek. Życzę sukcesów na tym polu, Aleksandrze!&no@yet&194.226.60.34

Poniżej znajduje się opis pól w księdze gości, o której mowa.
Imię - imię, nazwisko, patronimika, pseudonim - według uznania odwiedzającego
Praca - zawód, zawód
RadioButton - trzy przyciski: Podobało mi się (Dobrze), Nie podobało mi się (Złe), Nie obchodzi mnie to (Inne)
Tekst - pole tekstowe komentarzy i notatek
E-mail - adres zwrotny

add_guestbook.pl - wpis do książki

#! e:\perl5\perl # Pierwsza linia jak zwykle wymaga "ssi-pl.pl"; # Używam paska nawigacji jako dodatku SSI. W tym celu należy skorzystać z modułu ssi-pl.pl if (($ENV("QUERY_STRING") eq "") lub ($ENV(CONTENT_LENGTH)=0)) ( # Jeżeli nie ma danych wejściowych to wygeneruj stronę z drukiem formularza< Księga skarg i sugestii

HTML DoInclude("_menu.htm"); # To jest włączenie SSI paska nawigacyjnego. wydrukować<

I, , z zawodu prosty, Odwiedziwszy ten serwer i zapoznawszy się z prezentowanymi na nim materiałami, chcę wyrazić swoje uczucia i emocje w następujących przyzwoitych słowach:

Lubię to:-)

Nie lubiłem:-(

Nie obchodzi mnie to :-|

Oprócz tego, co zostało powiedziane, chcę również powiedzieć:

Proszę o rozpatrzenie mojego wniosku i podjęcie natychmiastowych działań. Decyzję w sprawie mojego wniosku należy przesłać pisemnie na mój adres e-mail.

kostka HTML; ) # Teraz otrzymujemy dane wejściowe. $Nazwa = $pole("Nazwa"); $Praca = $pole("Praca" ; $RadioButton = $pole("RadioButton"); $Tekst = $pole("Tekst"); $E-mail = $pole("E-mail" ; $Wyślij = $pole("Wyślij"); # to pole nie jest używane # Sprawdź, czy wymagane pola są wypełnione. # Jeśli nie, wygeneruj strona HTML z prośbą o wypełnienie wymaganych pól. if ($Nazwa eq "" || $Email eq "" || $Text eq "") ( drukuj< Księga skarg i sugestii - błąd

<

Nie podałeś swojego imienia i nazwiska, adresu e-mail lub nie wypełniłeś tekstu swojej recenzji. Wróć na stronę formularza i wypełnij wymagane pola.

Z powrotem

HTML ) else # wszystkie dane zostały wpisane poprawnie ( # Jeśli wszystkie pola są wypełnione poprawnie, to zaczynamy je przetwarzać. $Text=~tr/\r\n/ /; # zamień znak końca wiersza na spację # Jeśli w polu tekstowym formularza, który odwiedzający nacisnął Enter, # to musisz usunąć znaki nowej linii, aby móc # zapisać wszystkie pola formularza w jednej linii pliku. if ($Work eq "") ($Work=" "); #jeśli puste - to spacja # Jeśli pole nie jest wypełnione, to jest równe spacji. $Nazwa=~s/&/ /g; $Praca=~s/&/ /g; $ Text=~s/&/ /g; $Email=~s/&/ / g; # Jeśli odwiedzający użył symbolu &, to zamień go na spację, # ponieważ tym symbolem będziemy oddzielać nasze pola w plik. open(OutFile, ">>księga gości.txt") || die; # Otwórz plik, aby dodać . $Time=localtime; #get the time # Uzyskaj godzinę uzupełnienia księgi gości. $line=join( "&", $Time, $Name, $Work, $RadioButton, $Text, $Email, $ENV(REMOTE_HOST)); # I na koniec umieszczamy wszystkie pola formularza w jednej linii i na wszelki wypadek dodajemy: koniec # adres IP odwiedzającego pobrany ze zmiennych środowiskowych. wydrukuj plik wyjściowy „$line\n”; zamknijOutFile; # Zapisz wynikową linię do pliku i zamknij go. # Pozostaje tylko podziękować odwiedzającemu. # wydrukuj wiadomość o powodzeniu print "Typ zawartości: tekst/html\n\n"; wydrukuj " \n" ; drukuj "\n" ; drukuj " \n"; drukuj " "."\n" ; drukuj " "."\n" ; drukuj " Księga skarg i sugestii\n"; drukuj "\n" ; drukuj "\n" ; drukuj " "."\n" ; drukuj "
"."\n" ; drukuj "\n" ; drukuj " "."\n" ; drukuj " \n"; drukuj " "."\n" ; drukuj " "."\n" ; drukuj "\n"; drukuj "

"; drukuj "

\n"; drukuj "
"."\n" ; drukuj "\n" ; drukuj " "."\n" ; drukuj " \n"; drukuj " "."\n" ; drukuj " "."\n" ; drukuj " "."\n" ; drukuj "\n"; drukuj "

"."\n" ; DoInclude("D:/InetPub/wwwroot/_menu.htm"); drukuj "

Twoje dane."\n" ;print" zostały zaakceptowane. Dziękuję.

\n"; drukuj "

"; drukuj "

\n"; drukuj "
\n" ; drukuj "\n" ; drukuj " \n"; drukuj " \n"; drukuj " "."\n" ; drukuj "\n"; drukuj "
\n"; drukuj "\n"; drukuj "\n" ; ) # Nie zapomnij o procedurze analizowania danych z formularza. sub GetFormInput ( (*fval) = @_ if @_ ; local ($buf); if ($ENV("REQUEST_METHOD") eq " POST") ( czytaj (STDIN,$buf,$ENV("CONTENT_LENGTH")); ) else ( $buf=$ENV("QUERY_STRING"); ) if ($buf eq "") (zwróć 0 ; ) else ( @fval=split( /&/,$buf); foreach $i (0 .. $#fval)( ($nazwa,$val)=split (/=/,$fval[$i],2); $ val=~tr/ +/ /; $val=~ s/%(..)/pack("c",hex($1))/ge; $nazwa=~tr/+/ /; $nazwa=~ s /%(.. )/pack("c",hex($1))/ge; if (!definiowane($pole($nazwa))) ( $pole($nazwa)=$val; ) else ( $pole ($nazwa) . = ",$val"; #jeśli chcesz, aby wielokrotne zaznaczenia weszły do ​​tablicy, zmień na: #$field($name) .= "\0$val"; ) ) ) return 1; )

read_guestbook.pl - czytanie książki

#! e:\perl5\perl # Pierwsza linia jak zwykle wymaga "ssi-pl.pl"; # Używam paska nawigacji jako dodatku SSI. W tym celu należy skorzystać z modułu open(InFile, "księga gości.txt") ssi-pl.pl || umierać; # Otwórz plik z wpisami do księgi gości. @linie= ; # Wczytaj linie do tablicy. # Podaj nagłówek strony HTML. wydrukować< Księga skarg i sugestii - piszą do nas

HTML DoInclude("D:/InetPub/wwwroot/_menu.htm"); wydrukować<

Piszą do nas:

HTML # Teraz wyświetlamy rekordy w niewidocznej (co oznacza, że ​​ramka nie jest widoczna) tabeli. # Aby najpierw wyświetlić najnowsze wpisy, przetwórz tablicę ciągów znaków od końca. for ($i=$#lines; $i>=$[; $i--) #przetwórz linie pliku od końca ( # Podziel linię na części @item=split("&", $lines[$i ]); #podziel na części # Teraz zamień znaczniki HTML we wpisie (w przypadku jakiegoś przebiegłego użytkownika) foreach (@item) ( $_=~s//>/g; ) # Przejdźmy bezpośrednio do wydruku rekordów w formacie HTML " \n"; drukuj " \n"; drukuj "\n"; ) # Pozostaje wydrukować końcowy wydruk HTML<
"."\n"; # W zależności od pola, w którym odwiedzający miał możliwość wyboru, czy mu się podoba, czy nie, # rysujemy obrazek odpowiednio z wesołą lub smutną twarzą. Jako znacznik ALT # dla zdjęcia, możemy zapisze adres IP odwiedzającego. drukuj "
„.” „.$przedmiot.”
\n"; drukuj "
„.$przedmiot.”, „.$przedmiot.”
\n"; drukuj "
„.$przedmiot.”
"."\n"; drukuj "
„.$przedmiot.”
\n"; drukuj "
\n"; drukuj "
HTML zamknij InFile; # Zamknij plik z wpisami do księgi gości.

Za chwilę wyruszysz w podróż do świata programowania w języku Perl. Twoja podróż będzie tym przyjemniejsza, dzięki obecności dużej liczby przykładów, które napotkasz po drodze. Początek naszej podróży obejmuje podstawowe pojęcia języka. Stopniowo nauczysz się wystarczająco dużo o Perlu, aby tworzyć małe programy. Na końcu naszej podróży będziesz już posiadał niezbędną wiedzę, aby móc tworzyć pełnoprawne aplikacje.

Czy znasz jakieś inne języki programowania? Jeśli tak, to nauka Perla będzie dla Ciebie przyjemnością. Jeśli nie, nie spiesz się, wypróbuj wszystkie proponowane ćwiczenia i przykłady i nie bój się eksperymentować!

Pochodzenie

Perl powstał dzięki wysiłkom jednego człowieka i, jak sam przyznaje, wynikowi jego lenistwa. To wyjątkowy język, którego istoty nie da się przekazać za pomocą prostego opisu szczegółów technicznych. Perl to stan umysłu.

Jedną z osobliwości tego języka jest jego nazwa. Ma kilka definicji. Perl pierwotnie oznaczał język raportów praktycznej ekstrakcji. Jednak programiści bardzo często nazywają go patologicznie eklektycznym śmieciarzem lub nawet praktycznie wszystkim naprawdę sympatycznym.

Poświęćmy kilka minut, aby zrozumieć, czym jest Perl i jakie zadania zostały mu przypisane w momencie jego tworzenia. Już w 1986 roku Larry Wall pracował nad problemem generowania raportów z dużej liczby plików tekstowych, które nakładały się na siebie. Będąc programistą Uniksa, a ponieważ zadanie polegało na manipulowaniu zawartością plików tekstowych, najpierw spróbował użyć Awk. Szybko jednak okazało się, że Awk nie nadaje się do tego zadania i nie mając innych kandydatów do rozwiązania problemu, pozostało tylko wymyślić własne narzędzie, które można by wykorzystać w przyszłości.

Zamiast tracić czas, Larry po prostu wymyślił nowy język programowania i napisał dla niego interpreter. Wydaje się to paradoksem, ale nie do końca jest to prawdą – to, co robisz, zawsze wymaga dużo pracy, ale jeśli zrobisz to dobrze, to ta praca na pewno się opłaci.

Larry wkrótce zaoferował swoje dzieło społeczności czytelników grup dyskusyjnych Usenet. Użytkownicy mający dostęp do Usenetu przekazywali twórcy Perla skuteczne informacje zwrotne, pytając, jak zrobić to, tamto i tamto. Larry nawet nie miał zamiaru stwarzać wielu z tych problemów swojemu nowemu językowi programowania.

Nowy język programowania kładł nacisk na kontrolę systemu i przetwarzanie tekstu. Po kilku wersjach mógł już używać wyrażeń regularnych, sygnałów i gniazd sieciowych. Stał się znany jako Perl i szybko stał się popularny wśród programistów Uniksa, a wkrótce także wśród nas.

Larry nie zajmuje się już samodzielnie Perlem, ale zachowuje swój wyłączny tytuł głównego programisty.

Programy w Perlu są bardzo podobne do programów w C, być może dlatego, że Perl został napisany w C i być może dlatego, że Larry'emu przydały się pewne konstrukcje C. Ale Perl jest mniej pedantyczny i znacznie bardziej zwięzły niż C.

Perl został zaprojektowany, aby pomóc programiście w wykonywaniu rutynowych zadań, które są zbyt trudne lub słabo przenośne dla powłoki, a także zbyt zawiłe lub trudne do zakodowania w języku C (lub jakimkolwiek innym języku).

Kiedy już opanujesz Perla, może się okazać, że będziesz spędzać zauważalnie mniej czasu na poprawnym cytowaniu różnych parametrów powłoki (lub prawidłowym wykonywaniu deklaracji C), a więcej na czytaniu wiadomości z Usenetu i jeździe na nartach, ponieważ Perl jest wspaniałym narzędziem, które pomoże Ci stać się programista. „Niektórzy starożytni” mówili: „Nie powinieneś uczyć się języka programowania, który nie zmienia radykalnie twojego rozumienia programowania”. Bądź pewien, że gdy nauczysz się Perla, spojrzysz na programowanie z zupełnie innej perspektywy.

Potężne konstrukcje tego języka pozwalają na tworzenie bardzo skutecznych rozwiązań i uniwersalnych narzędzi przy minimalnym wysiłku. Narzędzia te mogą być nadal używane, ponieważ programy napisane w języku Perl są wysoce przenośne i gotowe do użycia. Dzięki temu będziesz mieć jeszcze więcej czasu na czytanie aktualności Usenetu i chodzenie do barów ze znajomymi.

Perl bardzo dobrze radzi sobie z zadaniami niskiego poziomu, zwłaszcza od czasu wydania piątej wersji tego języka.

Koszt i licencja

Perl jest darmowy. Mówiąc ściślej, Perl jest rozpowszechniany na licencji publicznej GNU. Kompletny kod źródłowy i dokumentację można kopiować, kompilować i drukować całkowicie bezpłatnie. Wszystkie programy, które napiszesz w Perlu, są Twoje i możesz z nimi zrobić, co chcesz.

Oprócz komputerów z systemem UNIX Perl istnieje również na inne platformy - Windows, DOS, Atari, Amiga itp.

Czy masz zainstalowany Perl?

Bardzo łatwo jest sprawdzić, czy masz Perla. Po prostu wydaj następujące polecenie w wierszu poleceń:

perl -v To jest Perl, wersja 5.001
Nieoficjalny poziom łatki 1m.
Prawa autorskie 1987-1994, Larry Wall Port Win32 Prawa autorskie 1995 Microsoft Corporation. Wszelkie prawa zastrzeżone.
Opracowano przez hip communication iNC., //info.hip.com/info/
Perl dla Win32, kompilacja 107
Zbudowany 16 kwietnia 1996 o 14:47:22
Perl można kopiować wyłącznie na warunkach Licencji Artystycznej lub Powszechnej Licencji Publicznej GNU, które można znaleźć w zestawie źródłowym Perla 5.0.

Jeśli pojawi się komunikat o błędzie lub masz wersję 4 Perla, skontaktuj się z administratorem systemu lub samodzielnie zainstaluj Perl.

Twój pierwszy program w Perlu

Twój pierwszy program w Perlu ilustruje drukowanie linii tekstu na ekranie. Na początek musisz utworzyć prosty plik tekstowy, który będzie zawierał Twój program w języku Perl. Następnie uruchomisz plik programu.

Tworzenie programu

Program w języku Perl to zwykły plik tekstowy zawierający kilka konstrukcji językowych. Te ostatnie zwykle przypominają mieszankę języka C, skryptu powłoki Unix i języka angielskiego. Ogólnie rzecz biorąc, dokładnie tak jest w rzeczywistości.

Kod Perla może być bardzo różnorodny. Oto kilka podstawowych zasad:

Spacje wiodące w wierszu są ignorowane. Możesz umieścić instrukcję językową gdziekolwiek chcesz: na początku linii, z wcięciem (zalecane) lub nawet wyrównaną do prawej (ale w tym przypadku będzie niezwykle trudno przeczytać tekst programu i cokolwiek zrozumieć);

Konstrukcja językowa musi kończyć się średnikiem, chyba że jest ostatnią konstrukcją w bloku lub pliku albo jest instrukcją eval;

Spacje, tabulatory, puste linie nie mają znaczenia – jedna spacja równa się stu spacji. Oznacza to, że dla przejrzystości można podzielić konstrukcję językową na wiele linii. Ciąg znaków to zazwyczaj ciąg znaków otoczony cudzysłowami. Rozdział 2, „Literały liczbowe i łańcuchowe”, zawiera bardziej szczegółowy opis ciągów;

Wszystko, co następuje po znaku „#”, jest ignorowane, chyba że znajduje się w wierszu. Użyj tej funkcji, aby dodać przydatne komentarze do swojego kodu. Należy zauważyć, że w Perlu nie ma komentarzy wielowierszowych (na przykład jak w języku C).

Podobnie jak skrypt powłoki, program Perla składa się ze wszystkich instrukcji Perla znajdujących się w pliku, traktowanych łącznie jako jeden duży program do wykonania. Nie ma koncepcji funkcji głównej, jak w C, w Perlu.

Typy danych są używane w programach podczas deklarowania zmiennych. Krótko mówiąc, typ danych definiuje zestaw wartości, jakie może przyjąć zmienna, a także zestaw operacji, które program może na niej wykonać. W Perlu dane mogą być liczbą lub ciągiem znaków.

Jedna wartość nazywana jest wielkością skalarną lub po prostu skalarem. Poniżej znajdują się przykłady wartości skalarnych używanych w Perlu:
- Dziesiętne: 127 lub 127,0 lub 1,27E2
- Szesnastkowy: Ox7F lub 0x7f
- Octal: 0177 (pierwsze 0 oznacza, że ​​używana jest liczba ósemkowa)
- Ciąg znaków: „Hello World\n” lub „Hello World”

Na przykład poniższe polecenie używa debugera Perla do wydrukowania liczby ósemkowej 0177, która odpowiada liczbie dziesiętnej 127:

D.B.<4>r 0177 127

Perl tłumaczy dane na swój wewnętrzny format. Kiedy Perl drukuje wartości ósemkowe lub szesnastkowe, najpierw konwertuje je na format dziesiętny, jak pokazano.

Uwaga: Jak się dowiesz, skrypt Perla umożliwia użycie funkcji printf do wydrukowania wartości w formacie wywoływalnym, takim jak ósemkowy lub szesnastkowy.

Jako wewnętrzna reprezentacja wszystkich liczb używany jest format zmiennoprzecinkowy podwójnej precyzji. Innymi słowy, wśród formatów wewnętrznych nie ma liczby całkowitej. Jednak w większości przypadków możesz to zignorować, a Perl zrobi wszystko dobrze. Na przykład, jeśli użyjesz ilości w kontekście, w którym sensowne są tylko wartości całkowite, Perl automatycznie skróci samą liczbę.

Uwaga: Jeśli programujesz w C i automatycznie zastosowałeś dzielenie liczb całkowitych z obcięciem liczb całkowitych, to programując w Perlu musisz pamiętać o ręcznym wykonaniu obcięcia za pomocą funkcji int().

Poniższe polecenie ilustruje, jak Perl obsługuje liczby całkowite i zmiennoprzecinkowe:

Drukuj 6 i 3; # wydrukuje 2 wydrukuje 6,9 ​​i 3,1 # wydrukuje 7 / 2 # wydrukuje 2,3333 nie liczbę całkowitą wydrukuj int(7/3) # wydrukuje 2

W ten sam sposób Perl konwertuje liczby zmiennoprzecinkowe na liczby całkowite: gdy skrypt używa wartości całkowitych, konwertuje również liczby na ciągi znaków i odwrotnie, jeśli taka konwersja ma sens. Na przykład, jeśli skrypt używa liczb w kontekście, w którym sensowne są tylko ciągi znaków, na przykład podczas łączenia ciągów, konwertuje liczby na ciągi znaków. Podobnie, jeśli chcesz używać ciągów znaków, w których sensowne są tylko liczby, Perl konwertuje je na liczby. Pracując ze skryptami Perla, zazwyczaj nie musisz martwić się o wewnętrzną reprezentację wartości skalarnych.

Perl obsługuje również koncepcję wartości logicznych, ale nie ma specjalnego typu do ich opisu. Podobnie jak w C, wartość liczbową uważa się za prawdziwą, jeśli nie wynosi zero. Ponadto wartość ciągu jest traktowana jako prawdziwa, jeśli nie jest równa „” lub „0”. Niektóre operatory logiczne, takie jak<>> (większy niż), zwróć jeden jako wartość<истинно>i zero - jak<ложно>.

Zatem Twój skrypt powinien po prostu traktować niezerowe wartości zarówno typu string, jak i numerycznego, jako wartości logiczne<истинно>. Skrypty Perla mogą grupować wartości skalarne i tworzyć listy. Jeśli skrypt przechowuje listę w jakiejś zmiennej, wówczas zmienna ta staje się tablicą.

ZMIENNE

Perl obsługuje trzy typy zmiennych: skalary, tablice i tablice asocjacyjne. Podobnie jak w C, nazwy zmiennych są pisane z rozróżnieniem pomiędzy małymi i wielkimi literami. Zatem nazwy VAR, Var i var opisują różne zmienne. Skrypt może zawierać zmienną skalarną o nazwie var i zmienną tablicową również o nazwie var. Będą się różnić w Perlu w zależności od kontekstu.

Uwaga: Zmienne Perla nie mają typu, tak jak w C. Na przykład zmienna skalarna może zawierać dowolny typ skalarny, a rzutowanie typów odbywa się automatycznie. Ponadto, jak być może już zauważyłeś, zmienne w Perlu niekoniecznie muszą być deklarowane. Jeśli zmienna nie jest zadeklarowana, Perl traktuje ją jako globalną. Poniżej dowiesz się o deklaracji zmiennych i ich zakresie.

ZMIENNE SKALARNE

Jak zauważono, zmienna skalarna może zawierać pojedynczą wartość. W Perlu nazwy zmiennych skalarnych zawsze zaczynają się od ($). Poniższe wyrażenie przypisuje zmiennej skalarnej $age wartość 35, a zmiennej $name wartość ciągu . Następnie funkcja print służy do wydrukowania wartości każdej zmiennej:

$wiek = 35; $imię = "Bob"; print ($imię, „jest”, $wiek);

Jeśli zapiszesz te wyrażenia w pliku o nazwie SCALAR.PL, możesz uruchomić program w następujący sposób:

C:\PERL> Perl SCALAR.PL Bob ma 35 lat

TABLICE

Jak wspomniano powyżej, tablice to zmienne, które jako wartość przyjmują listę wartości skalarnych.Poniższy tekst programu Perl ilustruje deklarację zmiennych tablicowych i ich inicjalizację:

@days = („niedziela”, „poniedziałek”, „wtorek”, „środa”, „czw”, „piątek”, „sobota”); drukuj(@dni); # wydrukuje „SunMonTueWedThuFriSat” print($days); # wypisze „Czw” @weekdays = @days; # wartość („Pon”, „Wtorek”, „Środa”, „Czw”, „Piątek”) @emptylist = (); # lista oczekujących

Odniesienie do zmiennych typu<массив>zwykle zaczyna się od znaku (@), po którym następują wartości w nawiasach kwadratowych ().Podobnie jak w programowaniu w C, indeksy tablicowe dla skryptów są zawsze zmiennymi typu całkowitego, które zwykle zaczynają się od wartości null. Wyjątki od tych dwóch reguł zobaczysz w przykładach wyjaśnionych w tym rozdziale Trzecie wyrażenie ($days) jest przykładem tablicy odwołującej się do wartości skalarnej. Ponieważ zawiera tylko jeden element, wynikowa wartość jest skalarem.

Jeśli zamiast znaku (@) użyjesz znaku ($), skrypt będzie odwoływał się do wartości skalarnej. Ta uwaga jest bardzo ważna. Nawiasy kwadratowe oznaczają, że skrypt odwołuje się do tablicy.Z kolei znak $ oznacza odniesienie do wartości skalarnej.Inicjowanie tablicy @daydays odbywa się poprzez wybranie części tablicy @days. W poprzednim przykładzie tablica @days została użyta bez indeksu. Gdy indeks zostanie pominięty, Perl odwołuje się do całej tablicy. Podobnie w poprzednim przykładzie tablica @days została zainicjowana listą literałów.

Oprócz przypisania literałów jako wartości do tablicy, skrypt może także przypisać do tablic wartości zmiennych lub nawet innych tablic, jak pokazano poniżej:

@stuff = ($wiek, $imię) @FriendsOfMine = („Joe”, „Mary”, @FriendsOfYours);

Poniższy przykład wykorzystuje części tablic:

@weekend = @dni; # wynik („Niedziela”, „Sobota”) print (@dni); # wyświetli „MonTueWedThuFriSunSat”

Jeśli skrypt używa zmiennej tablicowej w kontekście skalara, wówczas wartością jest liczba elementów tablicy. Kontekst skalarny to taki, w którym znaczenie mają tylko wartości skalarne. Na przykład poniższe wyrażenie używa kontekstu skalarnego dla tablicy stuff w celu określenia liczby elementów zawartych w tablicy. Jeżeli liczba elementów jest większa lub równa 2, skrypt wyświetla komunikat i kończy wykonywanie:

(@rzeczy >= 2) || die "Za dużo rzeczy!\n";

Funkcja die nakazuje Perlowi zakończenie wykonywania i wyświetlenie określonego komunikatu. Jeśli wiadomość nie jest zawarta, funkcja po prostu kończy skrypt.

Perl obsługuje także specjalną konstrukcję zmiennej $#, która zwraca ostatnią wartość indeksu w tablicy. Na przykład poniższe wyrażenie używa $[ do określenia początkowej wartości indeksu tablicy i $# do określenia ostatniego elementu tablicy. W tym przypadku za pomocą wyrażenia for wyświetlane są wartości każdego z elementów:

Dla ($i =$[; $i<= $#stuff; $i++) { print $stuff[$i]; }

Napisaną pętlę for można zastąpić następującym równoważnym wyrażeniem:

Drukuj @rzeczy;

ROLA KONTEKSTU ZMIENNYCH TYPU SKALARNEGO I WEKTOROWEGO

Należy zauważyć, że operator konstrukcji listy (,) wygląda dokładnie tak samo jak operator oceny sekwencyjnej (,). To, który operator zostanie użyty, zależy od kontekstu, w jakim się pojawia, w szczególności od tego, czy zmienna jest skalarem, czy tablicą. Perl używa konstrukcji list w kontekście tablic i sekwencyjnej oceny skalarów. Rozważ następujące wyrażenia:

@an_array = (1,2,3,4,5); $a_skalarny = (1,2,3,4,5);

Pierwsze wyrażenie inicjuje tablicę, podczas gdy drugie wyrażenie ustawia zmienną skalarną $a_scalar na 5, odrzucając pierwsze cztery wartości. Rozważ następujące dwa wyrażenia:

Wydrukuj $assoc(1,2); drukuj @assoc(1,2);

W pierwszym przypadku wydrukowana zostanie jedna wartość tablicy asocjacyjnej z dwoma kluczami, natomiast w drugim przypadku zostaną wydrukowane dwie wartości tablicy asocjacyjnej z jednym kluczem. Z poniższych dwóch wyrażeń pierwsze kopiuje listę, a drugie przypisuje wartość skalarną równą rozmiarowi tablicy:

@x = @lista; $x = @lista;

TABLICE ASORCJACYJNE

Tablice asocjacyjne są podobne do zwykłych tablic w tym sensie, że są listą zmiennych skalarnych.Różnica jest taka, że ​​tablica musi używać wartości całkowitych jako wskaźników podczas wybierania elementów tablicy, natomiast tablica asocjacyjna może używać wartości dowolnego typu do selekcji elementy tablicy. Wartości indeksów tablicy asocjacyjnej nazywane są kluczami. Rozważ następujące przykłady:

$wieki("Bob") = 35; $wieki("Maria") = 25; $, = " "; # zmień separator wyjściowy dla operatora drukowania print @ages("Bob","Mary"); # wypisze "25 35" klawiszy drukowania (%wieków); # wypisze „Bob Mary” dla $name (keys(%ages)) ( print „$name is $ages($keys)\n”; )

Jak widać program przypisuje wartości zmiennej „$” (zmienna skalarna, której nazwa jest przecinkiem). Skrypt używa tego wyrażenia, aby w przypadku późniejszego użycia instrukcji print dane wyjściowe nie scaliły się ze sobą. Zmienne specjalne, takie jak „$”, zostaną omówione w dalszej części tego rozdziału. Tablice asocjacyjne identyfikuje się za pomocą nawiasów klamrowych. Podobnie jak w przypadku tablic, indeksy nie są używane podczas odwoływania się do całej tablicy asocjacyjnej. Na przykład link@ages("Bob", "Mary") używa indeksów w nawiasach, co wskazuje na tablicę asocjacyjną. Przedrostek @ wskazuje, że mówimy o tablicy. Podobnie użycie znaku dolara przed tablicą wskazuje, że używana jest wielkość skalarna.

Uwaga: Jeśli podano dwa klucze, to wraz ze znakiem @ oznacza to, że mówimy o części tablicy asocjacyjnej i wynik powinien mieć postać listy. To wyrażenie jest odpowiednikiem #ages("Bob"), #ages("Mary"). który ma wartość (35, 25).

Wyrażenie print klucze(%ages) wywołuje operator kluczy, który zwraca pełną listę kluczy w tablicy asocjacyjnej. Odniesienie %ages ze znakiem procentu jako przedrostkiem oznacza, że ​​odwołanie odnosi się do całej tablicy asocjacyjnej. Należy pamiętać, że pętla for odnosi się do zmiennych ujętych w cudzysłów. Na koniec, ostatni omawiany przykład również wykorzystuje operator kluczy i wprowadza pętlę for, która pozwala wydrukować wszystkie kombinacje tablicy asocjacyjnej. Pętla for odnosi się do zmiennych ujętych w cudzysłów. Perl z kolei zastąpi wartości, do których odwołują się zmienne podczas analizowania ciągu. Programiści nazywają to podstawieniem lub interpolacją zmiennej procesowej.

Uwaga: Perl nie interpretuje zmiennych zawierających ciągi znaków w pojedynczym cudzysłowie.

OPERATORZY PERLA

Chociaż typy danych i zmiennych w Perlu są zupełnie inne niż w C, operatory i wyrażenia w Perlu powinny wydawać się znacznie bardziej znajome. Wszystkie operatory C są obecne w Perlu z wyjątkiem operatora typu, operatora *ptr zawartości i operatora var.member lub var->member. Ponadto Perl wprowadza wiele nowych operatorów do stosowania w operacjach takich jak porównywanie ciągów i manipulowanie ciągami.

OPERATORY ARYTMETYCZNE

Operatory arytmetyczne działają na wartościach liczbowych, a ich wynikiem jest liczba. Jeśli wyrażenie zawiera argumenty łańcuchowe, Perl przed oceną wyrażenia konwertuje wartości łańcuchowe na wartości numeryczne. Perl konwertuje ciągi znaków na liczby w podobny sposób, jak funkcja C atof() w bibliotekach wykonawczych. Perl obsługuje obecnie następujące operatory arytmetyczne:
- + dodatek
- - odejmowanie lub zmiana znaku
- * mnożenie
- / dzielenie (tylko dla liczb zmiennoprzecinkowych)
- % modulo (tylko dla wartości całkowitych)

Spójrzmy na następujące przykłady działania arytmetyczne Język Perla:

$x = 2,5; $y = 3; drukuj ($x + 2*$y); # wydrukuje wydruk 8,5 (7 / $y); # wydrukuje 2.3333333 print int (7 / $y); # wydrukuje 2 wydruki (7% $y); # wydrukuje 1 wydruk (7,5% $y); # wydrukuje 1

Uwaga: W Perlu operator dzielenia zawsze daje w wyniku liczbę zmiennoprzecinkową, a wynikiem wzięcia jednej liczby modulo drugiej jest liczba całkowita, a oba operandy są najpierw konwertowane na typ całkowity.

Rozważmy następującą operację modulo:

Drukuj (7,9% 3,6); # wyświetli 1 to samo (7% 3) = 1

Perl obsługuje także operatory inkrementacji i dekrementacji:
- ++ zmniejszenie w formie przedrostka lub postfiksu
- - inkrementacja w formie przedrostka lub postfiksu.Przyjrzyjmy się przykładom operacji inkrementacji i dekrementacji:

$x = 4; +$x; wydrukuj $x; # wypisze 5 $y = $x-; # zmniejszy x po przypisaniu y wartości x print "$y $x" # print 5 4

Wreszcie, Perl udostępnia operator arytmetyczny do potęgowania (**). Rozważmy następujące przykłady użycia operacji potęgowania:

$x = 2 ** 3; # wynik 8 $x = 2 ** 0,5; # Pierwiastek kwadratowy od 2 $x = -2 ** -3; # 1/(-2 do sześcianu), wynik -1/8 (-0,125)

OPERATORZY SUK

Operatory bitowe działają na binarnej reprezentacji liczb całkowitych i dają wynik w postaci całkowitej. Jeśli operand jest ciągiem znaków lub ułamkiem, Perl najpierw konwertuje go na liczbę całkowitą i przetwarza operand przy użyciu reprezentacji 32-bitowej. Wszystkie operatory bitowe C są reprezentowane w Perlu:
- | bitowe LUB
- & bitowe AND
- ^ bitowy wyłączny OR
- ~ inwersja bitów
- << сдвиг влево
- >> przesuń w prawo

Rozważmy następujące przykłady operacji bitowych:

$x = 5; #101 w formacie binarnym $y = 3; #011 w druku binarnym $x | $y; # 7 (111) drukuj $x i $y; # 1 (001) drukuj $x ^ $y # 6 (110) drukuj $x & ~1; # 4 (100) wydrukuj $x<< 2 # 20 (10100) print $x >> 1 # 2 (10)

Podobnie jak w C, zachowanie operatorów przesunięcia w prawo zależy od implementacji języka, gdy operand jest ujemny.

OPERATORY PORÓWNAŃ

Operatory porównania porównują wartości dwóch operandów. Podobnie jak podczas pracy z operatory arytmetyczne, Perl przed wykonaniem porównania konwertuje operandy łańcuchowe na operandy numeryczne. Aby umożliwić skryptowi porównywanie ciągów znaków niebędących liczbami, Perl posiada dodatkowe operatory porównywania ciągów. Operatory te porównują ciągi znaków przy użyciu wartości ASCII. Jeśli jako argument porównania ciągów podano wartość liczbową, jest ona najpierw konwertowana na ciąg znaków. Tabela 12.1 zawiera listę operatorów porównania:

Liczba Ciąg Wartość = = równa się! = nе nie równa > gt większe niż< it меньше чем >= gе większy lub równy<= lе меньше или равно <=>cmp nie jest równy (wynik ze znakiem)

Tabela 12.1. Operatory porównania w Perlu.

Wynikiem operacji porównania jest jeden, jeśli porównanie jest prawdziwe, i zero w przeciwnym razie. Jednak ostatnia operacja (<=>lub cmp) może zwrócić wartości -1, 0 lub 1 w zależności od tego, czy wartość pierwszego operandu jest mniejsza, równa, czy większa od drugiego.

Uwaga: Operator cmp w Perlu zachowuje się podobnie do funkcji Strcmp() biblioteki wykonawczej C.

Rozważ następujący przykład porównania:

$x = 5; # x równa się 5 wydruków ($x< 4); # если false, то выведет 0

OPERATORY LOGICZNE

Operatory logiczne analizują wyrażenia logiczne i zwracają wartości<истинно>Lub<ложно>w rezultacie. Perl traktuje operandy operacji logicznych jako wartości logiczne, tj. jako prawdziwe lub fałszywe.

Operatory logiczne Perla obejmują:


- || logiczne LUB
- && logiczne AND

Perl zawsze przetwarza wyrażenia logiczne od lewej do prawej. Oprócz. Perl zawsze przestaje oceniać, jeśli już przeprowadzona ocena jest wystarczająca do określenia wartości wyniku. Oprócz ogólnych operatorów logicznych Perl obsługuje następujące dodatkowe operatory logiczne:


-! logiczna negacja()
-
-: praca warunkowa
- , wykonanie sekwencyjne

Logiczny operator negacji (!) zastępuje wartość logiczną jej wartością przeciwną. Podobnie jak w C, Perl ma operator warunkowy (
-:) używa trzech operandów. Wyrażenie używające operatora warunkowego ma następującą postać:

Stan
- wynik prawdziwy: wynik fałszywy

Podobnie w poniższym wyrażeniu zastosowano operator warunkowy, aby zapewnić Bobowi pełny dostęp, a wszystkim innym ograniczony dostęp:

$dostęp = ($użytkownik równoważny „Bob”
- „Pełny” : „Ograniczony”);

Operator sekwencyjny<,>(znany również jako operator przecinka) nie jest operatorem całkowicie logicznym, ponieważ nie sprawdza prawdziwości jego operandów. Perl ocenia operandy operatora sekwencyjnego od lewej do prawej i zwraca wartość operandu położonego skrajnie na prawo. Poniższy przykład ilustruje użycie operatora przecinka w pętli for.

Dla ($i=0, $j=10; $i<10; $i++, $j-) { print i$," ",$j }

OPERATORY STRINGOWE

Ponieważ Perl jest językiem przetwarzania tekstu, nie jest zaskakujące, że zawiera dodatkowe operatory do manipulowania ciągami znaków. Poniżej znajdują się operatory przetwarzania ciągów:
-. łączenie ciągów
- x replikacja
- =~ zmienne dopasowanie wzorca
- !~ to samo co poprzednio, ale z dodaną negacją wyniku

Pierwsze dwa stwierdzenia można łatwo zilustrować przykładem:

Wydrukuj „b”. „an” x 2 . "A"; # wypisze „banan”

Jak pokazano, to wyrażenie używa łączenia ciągów i operatora replikacji do wydrukowania ciągu .Dwa ostatnie operatory służą do sprawdzenia, czy operand łańcuchowy zawiera dany wzorzec. Zagadnienie to zostało szczegółowo omówione w rozdziale<Регулярные выражения>. Poniższy przykład ilustruje ich zastosowanie:

$var = "banan"; drukuj ($var =~ /ana/)
- PRAWDA FAŁSZ;

W tym przypadku operator testu wystąpienia ciągu wzorcowego (=~) został użyty do sprawdzenia, czy wzorzec ana znajduje się w zmiennej $var. W w tym przypadku wyrażenie przyjmuje wartość<истинно>.

OPERATORZY PRZYPISANIA

Jeśli znasz język programowania C, formy operatorów przypisania w Perlu powinny być ci całkiem znane. Podobnie jak w C, operatory te wymuszają na Perlu wykonanie specjalnych operacji na wartościach pojawiających się po prawej stronie operatora, a następnie wykonanie przypisania:

= += -= *= /= %= |= &= ^= ~= <<= >>= **= .= x=

WARTOŚCI W Perlu, podobnie jak w C, wartość jest nazwą tego, co pojawia się po lewej stronie operatora przypisania. Zatem lwartość reprezentuje jednostkę, której można przypisać wartość, na przykład lwartość może być zmienną. Na przykład skrypt Perla nie może przypisać wartości do ciągu znaków, takiego jak wyrażenie = 32, ponieważ nie jest wartością. Jednakże skrypt może przypisać wartość $Bob, na przykład $Bob = 32, ponieważ $Bob jest wartością. W Perlu każda jednostka, której można użyć jako wartości, zwykle nią jest. Na przykład poniższe wyrażenie pakuje i rozpakowuje listę wartości, przy czym lista zmiennych w pierwszym przypadku i trzy skalary w drugim są wartościami:

@kolor = ($r, $g, $b); # pakiet kolorów ($r, $g, $b) = @color; #kolorowe rozpakowywanie

Kiedy pracujesz z listami w Perlu, operator przypisania niekoniecznie ma zastosowanie do całej listy. Skrypt może przypisywać wartości do poszczególnych elementów listy, jak pokazano poniżej:

@elementy = (100 200 300);

W tym przypadku operator przypisuje wartość trzem elementom listy. Podobnie poniższe wyrażenie rozpakowuje elementy listy, przypisując wartości dwóch pierwszych elementów dwóm zmiennym skalarnym, a pozostałą część tablicy zmiennej listowej:

($arg1,$arg2,@rest) = @ARGV; # możesz mieszać skalary i tablice

OPERACJE PRACY Z LISTAMI

Operacje związane z pracą z listami obejmują:

Konstruktor listowy - .. operator zasięgu - operator replikacji x

Używałeś już konstruktora list do inicjowania tablic i tworzenia listy zmiennych używanych jako wartości. Operator zakresu zwraca jako swoją wartość sekwencję liczb całkowitych rozpoczynającą się od lewego operandu i trwającą aż do prawego operandu włącznie. Do tworzenia list w skryptach często używany jest operator zakresu w połączeniu z konstruktorem list. Na przykład poniższe wyrażenie używa operatora zakresu do utworzenia listy o nazwie @digits zawierającej liczby od zera do dziewięciu:

@cyfry = 0..9; # lista (1,2,3,4,5,6,7,8,9)

Podobnie w tym wyrażeniu można użyć operatora zakresu do utworzenia zakresu zmian indeksów tablicy.Załóżmy, że lista @days zawiera dni tygodnia (zaczynając od niedzieli). Poniższe wyrażenie przypisuje wartości listy @weekdays począwszy od poniedziałku do piątku:

@weekend = @dni;

Na koniec poniższe wyrażenie wykorzystuje dwa operatory obszaru do utworzenia listy cyfr szesnastkowych:

@hex_digits = (0..9,a..f);

Operator replikacji po prostu tworzy kopie danego operandu określoną liczbę razy. Na przykład poniższe wyrażenie trzykrotnie powtarza listę wartości 1, 2, 3:

OPERATORY DO PRACY Z PLIKAMI

Perl zawiera obszerną listę operatorów do pracy z plikami. Istnieje co najmniej 27 operatorów, które zwracają określone informacje o pliku nawet bez jego otwierania. Wiele instrukcji Perla jest przeznaczonych dla systemów UNIX, ale poniższe instrukcje działają na każdym systemie:

D sprawdza obecność katalogu
--e określa obecność pliku
--s określa rozmiar pliku
--w określa, czy w danym pliku można zapisać

Następne dwa operatory plików zwracają wartość logiczną, trzeci operator zwraca rozmiar pliku w bajtach. Poniższy tekst ilustruje użycie tych operatorów:

If (-e,"perl.exe") ( print "Rozmiar pliku to:" -s "perl.exe"; ) else ( print "nie można znaleźć perl.exe\n"; ) (-w "Jakiś plik ") || die "Nie można zapisać w SomeFile\n";

PRIORYTETY WYKONANIA OPERATORA

Jak każdy język programowania, Perl określa priorytety wykonania operatorów, za pomocą których ustalana jest kolejność ich wykonywania. Tabela 12.2 przedstawia priorytety operatora od najwyższego do najniższego:


- ++
-! ~ jednoargumentowy minus
- **
- =~ !~
- * / % X
- +
- <<>>
-d -e -s -w (i inne operatory plików)
- <> <= >= To jest ważne
- = = != < =>równoważne cmp
- &
- |^
- &&
- ||
- ..
-
- : = += -= *=

Tabela 12.2. Pierwszeństwo operatora Perla od najwyższego do najniższego

W swoim skrypcie możesz zmienić kolejność wykonywania instrukcji, używając nawiasów.

KONSTRUKCJE PERLA

Perl obsługuje wszystkie wyrażenia C, używając niemal identycznego formatu. Na przykład konstrukcje sterujące if, while, do. for i goto są używane w tej samej formie w obu językach. Jak zobaczysz później, instrukcjacontinue ma w Perlu nieco inne znaczenie. Jej poprzednia wartość jest teraz nazywana następną, a instrukcja break nazywana jest teraz ostatnią. Perl nie implementuje instrukcji switch. Ponadto niektóre wyrażenia języka C można znaleźć w Perlu w innych formatach i dodano wiele nowych wyrażeń.

OPERATORY PROSTE I KOMPOZYTOWE

Proste wyrażenie to dowolna prawidłowa kombinacja operatorów i operandów. W Perlu operatorem jest wyrażenie kończące się średnikiem. Podobnie jak w języku programowania C, wszystkie instrukcje kończą się średnikiem. Kiedy wysyłasz tekst programu do debugera, możesz pominąć średnik, ponieważ debuger dostarczy go za ciebie. Poniższy tekst ilustruje prosty operator przypisania w Perlu:

$Title = "Programowanie WWW"; !}

Podobnie jak programowanie w C, skrypty Perla mogą zawierać bloki instrukcji lub instrukcje złożone, które są umieszczone w nawiasach klamrowych (()), jak pokazano poniżej:

(#Operatorzy#Kolejny blok operatora)

Twoje skrypty będą w szerokim zakresie wykorzystywać bloki instrukcji wraz z bardziej złożonymi instrukcjami. Podobnie jak w C, skrypty Perla mogą używać bloków instrukcji do definiowania zakresu zmiennych lokalnych. Jednakże definicja zmiennych lokalnych w bloku nie jest automatyczna. Aby je zadeklarować, skrypt musi używać słowa kluczowego local.Zakresowi zmiennych przyjrzymy się szczegółowo w dalszej części tego rozdziału.

OPERATORY WARUNKOWE

W wielu poprzednich przykładach użyto instrukcji if. W Perlu instrukcja if jest prawie identyczna z instrukcją if w C. Różnica polega jednak na tym, że w C instrukcja if może używać prostej instrukcji bez nawiasów klamrowych, podczas gdy w Perlu instrukcje muszą być ujęte w nawiasy klamrowe, tworząc blok.

Instrukcja if (wyrażona); // akceptowalne w C, ale nie w Perlu if (expr) ( instrukcja; # tak powinieneś to zrobić w Perlu)

Podobnie instrukcja else w Perlu działa nieco inaczej niż odpowiadająca jej instrukcja w C. W Perlu instrukcje również muszą być ujęte w nawiasy klamrowe i tworzyć blok:

// Przykład w C nie jest akceptowalny w Perlu if (expr1) instrukcja1; else if (wyrażenie2) instrukcja2; jeszcze ststement3;

Poniżej pokazano, że Perl pozwala na użycie konstrukcji elsif:

If (wyrażenie1) ( instrukcja1; ) elsif (wyrażenie2) ( instrukcja2; ) else ( instrukcja3; )

OPERATOR, JEŚLI

W języku programowania C programiści używają logicznej negacji (!), aby odwrócić wartość logiczną, jak pokazano poniżej:

If (!(expr)) // Negacja w C ( instrukcja; )

Oprócz stosowania negacji logicznej, skrypty Perla często zawierają instrukcję chyba, która robi to samo, co powyższy kod C.

Chyba że (wyrażenie) ( oświadczenie; )

Uwaga: W przeciwieństwie do C, Perl nie zawiera instrukcji switch.

ZRÓB OPERATORA

Szczególnym przypadkiem operatorów blokowych jest operator do, który pozwala blokowi instrukcji zwracać wartości. Wartość zwracana przez instrukcję do jest wartością ostatniego wyrażenia obliczonego w bloku. Na przykład poniższa instrukcja do porównuje zmienną łańcuchową $Month z miesiącami roku i ustawia zmienną $DayCount na liczbę dni w miesiącu:

$DayCount = do ( if ($Miesiąc równoważnik „Wrzesień” || $Miesiąc równoważnik „Kwiecień” || $Month eq „Czerwiec” || $Month eq „Listopad”) ( 30; ) elsif ($Miesiąc równowartość „Luty” ) ($Rok i 3
- 28: 29; # Sprawdź rok przestępny) else (31;));

Zauważ, że Perl wymaga średnika na końcu bloku do. Nie myl bloku do z instrukcją do while, co zostanie omówione w dalszej części tego rozdziału.

CYKLE I GAŁĘZIE

Perl obsługuje instrukcje pętli for, while i do z niewielkimi różnicami w porównaniu z ich implementacją w C. Istotna różnica polega na tym, że Perl wymaga, aby instrukcje były używane w blokach ujętych w nawiasy klamrowe. Jak zobaczysz także, Perl rozszerza konstrukcję pętli, udostępniając kilka nowych formularzy. W poniższych przykładach pętle for, while i do działają podobnie w językach C i Perl:

Dla($i = 0; $i< 100;$i++) { printf("%d\n", $i) ; } while ($i >0) ( printf("%d\n", $i-); ) wykonaj ( printf("%d\n", $i++); ) while ($i< 0);

Konstrukcja pętli w C różni się także od tej w Perlu tym, że Perl nie zawiera instrukcji break, a instrukcjacontinue pełni zupełnie inną funkcję. Na szczęście Perlo udostępnia kilka nowych, bardziej elastycznych i bardziej intuicyjnych konstrukcji:


- ostatni opuszcza pętlę (jak operator przerwania w C)
- następnie rozpocznij nową iterację (jak instrukcja Ccontinue)
- powtórz powtórzenie bieżącej iteracji

Aby zrozumieć konstrukcje pętli w Perlu, musisz zrozumieć użycie bloku Kontynuuj. Rozważmy następującą pętlę while, która zawiera blok kontynuuj:

$i = 100; póki ($i > 0) ( print $i; ) kontynuuj ($i-)

Blok Kontynuacji można traktować jako trzecie wyrażenie w pętli for, które jest wykonywane w każdej iteracji. Podobnie Perl wykonuje blok kontynuacji na końcu każdej iteracji. Jednakże, jak dowiesz się później, blok kontynuuj daje skryptowi większą kontrolę nad procesem niż zapewnia pętla for. Kiedy pętla Perla używa instrukcji next, blok continuue jest nadal wykonywany, jeśli istnieje. Jeśli jednak pętla korzysta z instrukcji redo, blok kontynuuj nie jest wykonywany.

TAGI

W skrypcie Perla etykiety oznaczają po prostu nazwę odpowiadającą jakiejś pozycji w skrypcie. Nazwy etykiet kończą się dwukropkiem (na przykład pętla zewnętrzna:). Używając instrukcji goto, skrypt może przeskoczyć do etykiety. Dodatkowo do przeskakiwania do etykiety można używać operatorów last, next i redo.Poniższy kod ilustruje użycie ostatniego operatora do przeskakiwania do etykiety:

Pętla zewnętrzna: while ($i > 0) ( while ($j > 0) ( #Tutaj inny proces if ($needToAboutLoop) (ostatnia pętla zewnętrzna; ) ) )

W tym przypadku instrukcja zawiera ostatnią gałąź, która umożliwia skok do pętli zewnętrznej i zakończenie pętli.

DO PĘTLI

Inną konstrukcją pętli w Perlu jest pętla Until, która jest przeciwieństwem pętli while. Pamiętaj, że w pętli while instrukcje są wykonywane, jeśli spełniony jest określony warunek. Z kolei w pętli Until instrukcje są wykonywane do momentu spełnienia warunku. Rozważmy na przykład pętlę while, taką jak ta pokazana na następnej stronie.

While (!(expr)) ( instrukcja; )

Używając pętli do, możesz utworzyć identyczną pętlę pokazaną poniżej:

Aż do (wyrażenie) ( instrukcja; )

Podobnie poniższa instrukcja do while używa operatora logicznej negacji do zapętlenia, aż dane wyrażenie logiczne zwróci wartość true:

Do ( instrukcja; ) while (!(wyrażenie));

Używając konstrukcji do Until, możesz utworzyć identyczną pętlę bez stosowania logicznej negacji:

Do (instrukcja;) aż do (wyrażenie);

CYKLE FOR I FOREACH

Perl obsługuje pętle w bardzo podobny sposób jak C:

For (wyrażenie1; wyrażenie; stwierdzenie2) ( oświadczenie3; )

Na przykład poniższy kod wykorzystuje pętlę for do wydrukowania wartości liczb od 0 do 100:

Dla ($cyfra = 0; $cyfra<=100; $digit++) { print $digit, " "; }

Dodatkowo Perl zawiera konstrukcję pętli foreach, która umożliwia skryptowi iterację po listach i tablicach. Spójrzmy na przykład:

@list = („a”, „b”, „c”); foreach $arg (@list) ( print "Element listy: $arg\n"; ) foreach $i (1..10) ( print "iteracja $i\n" )

W pierwszym przypadku pętla foreach iterowała po wartościach zmiennej @list. W drugim przykładzie pętla foreach iteruje po liczbach z zakresu od 1 do 10. Pętla foreach może zawierać listę literałów lub tablicę, jak pokazano w poprzednim przykładzie. Po jednej iteracji pętli specjalna zmienna skalarna (w pierwszym przypadku $arg, w drugim $i) przyjmuje wartość z podanej listy elementów. Zasięg tej zmiennej skalarnej w pętli foreach jest ograniczony do treści pętli. Dlatego zmienna pętli skalarnej fore nie będzie kolidować z identyczną nazwą zmiennej zdefiniowaną poza pętlą. Poniższy kod używa zmiennej o nazwie $i wewnątrz i na zewnątrz pętli foreach:

$i = 1001; foreach $i (1..9) ( print "$i\n"; # pętla wyświetli 123456789 ) print "$i\n";

Jak widać z tego przykładu, zmienna $i używana do organizowania iteracji pętli nie powoduje konfliktu ze zmienną $i zdefiniowaną poza pętlą. Cechą pętli foreach, z której mogą skorzystać Twoje skrypty, jest możliwość modyfikowania elementów tablicy (należy zachować ostrożność podczas implementowania tej funkcji!) Rozważmy następującą pętlę foreach, która dodaje wartość 10 do każdego elementu tablicy:

@lista = 1..5; foreach $i (@list) ( $i += 10; ) $, = " "; drukuj @listę; # wyświetli 11 12 13 14 15

Zróbmy kilka ostatnich uwag na temat pętli foreach. Perl traktuje nazwy foreach i for jako synonimy. Dlatego można używać tych nazw zamiennie w skryptach. Perl z kolei określi typ pętli na podstawie jej kontekstu.

BEZWARUNKOWA PRACA OPERATORA GOTO

Perl obsługuje operator goto, który jest identyczny z operatorem języka programowania C. Poniżej znajduje się przykład użycia operatora goto do drukowania liczb od 1 do 10:

$i = 1; pętla: drukuj $i++, " "; jeśli ($tj<=10) { goto loop; }

MODYFIKATORY OPERATORA

Perl używa specjalnych form konstrukcji if, chyba że, podczas i dopóki, aby kontrolować postęp obliczeń. W niektórych przypadkach te specjalne konstrukcje mogą sprawić, że Twój kod będzie jaśniejszy i łatwiejszy do odczytania. Aby kod był bardziej czytelny, a jego znaczenie bardziej oczywiste, zaleca się wybrać odpowiedni format zapisu. Rozważmy wyrażenie watch, które używa funkcji die do zakończenia skryptu, jeśli wartość zmiennej $count jest mniejsza niż 10:

Jeśli (liczba $< 10) { die; }

Umieszczając funkcję die przed instrukcją if, jak pokazano poniżej, liczba linii kodu zostanie zmniejszona:

Umrzyj, jeśli (liczba $< 10);

Podobnie to samo wyrażenie można zapisać w następujący sposób:

(liczba $ >= 10) || umierać;

W tym przypadku, jeśli zmienna $count jest większa lub równa 10, Perl zatrzymuje dalszą ocenę w tej linii i funkcja die nie jest wykonywana.W przeciwnym razie, jeśli zmienna $count jest mniejsza niż 10, po ocenie pierwszej części wyrażenie, kod uruchamia funkcję die i w ten sposób kończy wykonywanie skryptu. Na koniec, w poniższym przykładzie użycie konstrukcji chyba również zmniejsza liczbę linii do jednego:

Umrzyj, chyba że ($count >= 10);

Podobnie następujące pętle while są identyczne:

$i = 0; podczas gdy ($tj< 10) { $i++; } $i = 0; $i++ while ($i < 10);

Jak widać, stosując modyfikację projektu, skrypt pozwala na zmniejszenie liczby linii we wpisie pętli do jednej. Podobnie następujące pętle dopóki są równoważne:

$i = 10; aż ($i >= 10) ( $i++; ); $i = 10; $i++ do ($i >=10);

Uwaga: We wszystkich czterech przypadkach, nawet jeśli wyrażenie podlegające ocenie następuje po instrukcji, która ma zostać wykonana, Perl najpierw ocenia warunek, a dopiero potem wykonuje instrukcję.

GENEROWANIE WYRAŻEŃ DYNAMICZNYCH PRZY UŻYCIU FUNKCJI EVAL

Ponieważ Perl jest językiem interpretowanym, Twoje skrypty mogą używać Perla do generowania kodu<налету>, czyli dynamicznie podczas wykonywania skryptu. Dokładnie tak działa debuger Perla (który sam w sobie jest programem Perl o nazwie Perldb.PL). Projektując skrypty, możesz używać takiego dynamicznego kodu do tworzenia zmiennych dynamicznych, a nawet budowania specjalnych procedur. Perl ocenia wyrażenia dynamiczne za pomocą funkcji eval. Poniższy przykład tworzy instrukcję dynamiczną poprzez przypisanie wartości zmiennej do tekstu, który faktycznie zawiera wymaganą instrukcję Perla. Dalsze instrukcje wykorzystują funkcję eval do wykonania tej instrukcji:

$perl_statement = "drukuj "Witaj, świecie\n";"; eval $perl_statement; # wypisze Witaj, świecie $i = 1001; $nazwa_zmiennej = "$i"; drukuj eval $nazwa_zmiennej; # wypisze wartość $i

Uwaga: Używanie funkcji eval w skrypcie wiąże się z zagrożeniami, szczególnie jeśli skrypt przekazuje do funkcji eval dane dostarczone przez użytkownika. Używając funkcji eval, skrypt może wykonać dowolne polecenie Perla, w tym nawet polecenia systemowe. Daje to użytkownikowi kontrolę nad programem, co może być szczególnie ryzykowne w Internecie i sieci Web.

PODPROGRAMY

Podobnie jak wszystkie strukturalne języki programowania, Perl obsługuje procedury. Podprogram można zdefiniować za pomocą słowa kluczowego sub, jak pokazano poniżej:

Sub demo_sub ( drukuj "demo_sub o nazwie\n"; ) &demo_sub; # wywołanie podprogramu

W tym przypadku instrukcje tworzą podprogram o nazwie demo_sub. Aby wywołać podprogram, skrypt umieszcza ampersand (&) przed nazwą podprogramu. Podczas wywoływania podprogramu w Perlu nawiasy można pominąć. Możesz umieścić procedurę w dowolnym miejscu kodu źródłowego skryptu, ponieważ Perl przeanalizuje cały kod źródłowy przed wykonaniem skryptu. Podprogram można zadeklarować w kodzie źródłowym natychmiast po pierwszym użyciu podprogramu (odwołanie do przodu). Podprogramy mogą mieć argumenty i zwracać wartości. Poniższy fragment kodu zawiera procedurę o nazwie show_value, która wypisuje wartość otrzymaną przez procedurę jako parametr:

Sub show_value ( drukuj "Identyfikator wartości ", $_; ) &show_value(1001);

Formalnie procedura Perla nie deklaruje zmiennych do przechowywania argumentów. Zamiast tego do procedury przekazywana jest zmienna tablicowa o nazwie @_, która zawiera wartości parametrów. Z kolei procedura uzyskuje dostęp do wartości argumentów wykorzystując następującą notację elementów tablicy: $_, $_ itd. Jednak taki sposób przekazywania parametrów może pogorszyć czytelność kodu, dlatego większość procedur korzysta z kopiowania argumentów do zmiennych lokalnych. Podobnie jak w poprzednim przykładzie, poniższa procedura show_fwo_values ​​wyświetla wartości dwóch parametrów:

Sub show_two_values ​​​​( print "Pierwszy parametr ", $_, "\n"; print "Drugi parametr ", $_, "\n"; ) &show_two_values(1001, 2002);

Na koniec kolejna funkcja show_all_values, wypisuje wartości wszystkich otrzymanych parametrów. Funkcja wykorzystuje tablicę do zdefiniowania liczby jako parametru:

Sub show_all_values ​​​​( for ($i = 0; $i< @_; $i++) { print "Parametr ", $i, " is ", $_[$i], "\n"; } } & show_all_values(1001,2002,3003,4004);

Jak już wspomniano, procedury Perla mogą zwracać wartości. Służy do tego instrukcja return. W przeciwieństwie do języka C, Perl nie wymaga użycia instrukcji return. Jeśli procedura nie zawiera instrukcji return, jako wartość zwracana zostanie przyjęte ostatnie ocenione wyrażenie. Poniższy przykład dodaje dwa parametry i zwraca wynik:

Sub wartości_dodane ( return $_ + $_; ) print "Wynik to: ", &add_values(1001,2002);

BIBLIOTEKA PODPROGRAMÓW

W przeciwieństwie do C, Perl tak naprawdę nie obsługuje koncepcji biblioteki. Posiada jednak mechanizm, który pozwala skryptom używać kodu źródłowego z innego pliku.Załóżmy na przykład, że przechowujesz procedurę add_valuesl w pliku o nazwie addvalue.pl. Używając instrukcji require, inny skrypt Perla może uzyskać dostęp do tej procedury, jak pokazano poniżej:

Wymagaj „addvalue.pl”; drukuj &dodaj_wartości(10,11);

Możesz myśleć o instrukcji require jako analogicznej do instrukcji #include preprocesora C. Aby znaleźć plik źródłowy, Perl najpierw szuka biblioteki Perla w domyślnym katalogu (szczegóły znajdziesz w instrukcji instalacji), a następnie w bieżącym katalogu. Można także użyć ścieżki bezwzględnej lub względnej dołączonej do nazwy pliku. Perl zapamiętuje, które pliki zostały zażądane przez instrukcję require i ładuje je tylko raz, nawet jeśli dostęp do tych plików był wielokrotnie uzyskiwany. Istnieje wiele standardowych bibliotek rozszerzających możliwości języka Perl. Teraz jest dobry moment, aby przejrzeć katalog, w którym przechowywane są pliki bibliotek Perla, aby zapoznać się z oferowanymi przez nie możliwościami.

UŻYWANIE PAKIETÓW DO IZOLOWANIA PODPROCEDURY

Jeśli masz wiele procedur, zwłaszcza procedur przechowywanych w różnych plikach, może dojść do kolizji nazw zmiennych, gdy ta sama nazwa zmiennej jest używana do różnych celów. Perl pomaga tego uniknąć dzięki pakietom. Jak wiadomo, deklarując zmienne lokalne dla podprogramów, można uniknąć kolizji nazw. Jeśli jednak wiele procedur współdzieli określone dane, dane te mogą wymagać zasięgu globalnego, co może prowadzić do kolizji nazw.Używając pakietów, możesz grupować dane globalne w prywatne przestrzenie nazw, poza których zmienne globalne nie są widoczne, tj. nieznane . Rozważmy prosty przykład poniżej, w którym dwie procedury (znajdujące się w różnych plikach) korzystają z prywatnych, indywidualnych przestrzeni nazw.

# Kod w pliku one.pl sub sub_one ( pakiet demo_one; $some_data = 10; ) # * * * * * * * * # Kod w pliku two.pl sub sub_one ( pakiet demo_two; $some_data = 20; )

Jak widać, pierwsza procedura używa nazwy pakietu demo_one, druga procedura używa nazwy pakietu demo_two. Obie procedury mogą ustawiać i używać zmiennej $some_data bez powodowania kolizji nazw pomiędzy jedną zmienną globalną a drugą. Scenariusz<знает>nazwa pakietu, w którym zmienna się znajduje i organizuje dostęp do niej, używa nazwy pakietu jako przedrostka nazwy zmiennej. Poniższy przykład dodaje nazwę pakietu pakiet_pierwszy lub pakiet_dwa jako przedrostek do nazwy zmiennej niektóre_dane:

&sub_one; &sub_dwa; print "Zmienna 1 $pakiet_jeden"some_data\n" print "Zmienna 2 $pakiet_dwa"some_data\n"

Kiedy używasz pakietów Perla, możesz utworzyć unikalną przestrzeń nazw w bieżącym pliku źródłowym, umieszczając instrukcję pakietu na początku pliku, jak pokazano poniżej:

Pakiet nazwa_pakietu $some_data = 1; sub Some_sub (zwróć $some_data; )

W tym przypadku zmienna $some_data istnieje tylko w pakiecie i dlatego jest zabezpieczona przed niepoprawnym dostępem. Użycie pakietu daje zatem danym ten sam zakres, co w języku programowania C, gdzie zmienne globalne mają swój zasięg w pliku kodu źródłowego, w którym są zadeklarowane. Wywołując procedurę z innego pliku skryptu, musisz użyć nazwy pakietu:

Wymagaj „some_package.pl”; print &some_package_name"some_sub;

PRZETWARZANIE WIERSÓW

W poprzednich przykładach nauczyłeś się konstruować literały łańcuchowe przy użyciu interpolacji zmiennych. Nauczyłeś się także, jak łączyć literały łańcuchowe i zmienne łańcuchowe.W tej sekcji zobaczysz, że Perl udostępnia duży zestaw funkcji, których skrypty mogą używać do manipulowania ciągami znaków.

FUNKCJA CIĘCIA

Funkcja chop usuwa ostatni znak ciągu. Ma następujący format:

$znak = chop(Str);

Funkcja chop zwraca usunięty znak. Skrypty Perla szeroko wykorzystują metodę chop do usuwania znaków nowej linii i końca linii.

FUNKCJA INDEKSU

Funkcja indeksu wyszukuje dany podciąg w ciągu. Ma następujący format:

$lokalizacja = indeks(Str, SubStr[, Przesunięcie]);

Funkcja indeksu zwraca indeks pierwszego wystąpienia podciągu (SubStr) w ciągu (Str). Opcjonalnie można określić przesunięcie, po którym rozpoczyna się wyszukiwanie. Jeśli podciąg zostanie znaleziony, zwracana jest wartość -1. W poniższym przykładzie funkcja indeksu wyszukuje wystąpienia podciągu „na” po trzecim znaku w ciągu „banan”:

Drukuj indeks("banan","na",3); # Drukuje 4.

FUNKCJA RINDEXU

Funkcja rindex szuka ostatniego, skrajnego na prawo wystąpienia podciągu w ciągu i zwraca wartość pozycji pierwszego znaku podciągu. Funkcja ma następujący format:

$lokalizacja = rindex(Str, SubStr);

Ta funkcja jest podobna do funkcji indeksu, z tą różnicą, że zwraca ostatnie wystąpienie, a nie pierwsze. Na przykład poniższy przykład wykorzystuje funkcję rindex do określenia ostatniego wystąpienia podciągu „na” w ciągu „banan”:

Wydrukuj rindex("banan","na"); # Drukuje 4

FUNKCJA DŁUGOŚCI

Funkcja długości zwraca liczbę znaków w ciągu. Ma następujący format:

$len = długość(Str);

Poniższy przykład wykorzystuje funkcję długości do wydrukowania liczby znaków w ciągu:

Długość wydruku("banan"); # Drukuje 6

FUNKCJA PODSTR

Funkcja substr służy do usuwania części łańcucha. Ma następujący format:

$substring = substr(Str, Offset[,Długość]);

Funkcja zwraca podciąg, czyli część ciągu, którego długość nie przekracza wartości określonej opcjonalnym parametrem Len. Zwracany podciąg str zaczyna się od znaku w pozycji określonej przez Offset. W przypadku pominięcia parametru Len zwracany ciąg zawiera znaki do końca wiersza włącznie.Jeśli parametr Offset jest ujemny, offset liczony jest od końca wiersza. Na koniec skrypt może użyć substr jako wartości do wykonania operacji przypisania. Poniższy fragment kodu ilustruje użycie funkcji substr.

Drukuj substr("pomarańczowy",3); #Wyjście "nge" print substr("pomarańczowy",-2); # Wypisuje "ge" print substr("orange",2,2); # Wypisuje „an” $str = „jabłko”; substr($str,-3) = "rykot"; drukuj $str; # Drukuje „morelę”

Uwaga: Używanie operatorów wyrażeń regularnych w Perlu jest często bardziej wydajne niż używanie funkcji substr. Wyrażenia regularne zostaną omówione w dalszej części tego rozdziału.

DOŁĄCZ FUNKCJĘ

Funkcja Join łączy listę elementów w ciąg znaków, oddzielając każdy element danym znakiem. Ma następujący format:

$nowy_string = dołącz(Str,Lista);

Funkcja Join konwertuje każdy element listy na ciąg znaków i łączy ciągi. Poniższy fragment kodu ilustruje użycie funkcji łączenia:

$str = dołącz(",", 0..4,10,20); # Lista będzie miała postać „0,1,2,3,4,10,20” $strn = dołącz („\t”, $a, $b, $c);# Miesza listy

FUNKCJA PODZIAŁU

Funkcja split dzieli zawartość ciągu na listę elementów. Ma następujący format:

Podziel(Delimetr, Str[,Limit]);

Argument Delimeter określa znak, według którego należy dokonać podziału, taki jak spacja, słowo, tabulator itp. e. Opcjonalny parametr Limit określa maksymalną liczbę elementów, jakie może zawierać lista. Poniższy przykład ilustruje użycie funkcji podziału.

FUNKCJE PRZETWARZANIA LIST

W przykładach omówionych wcześniej w tym rozdziale nauczyliśmy się tworzyć listę, przechowywać ją jako wartość zmiennej, iterować po wszystkich elementach listy i uzyskiwać dostęp do poszczególnych elementów listy. W tej sekcji poznasz kilka dodatkowych funkcji, które poszerzą Twoje możliwości pracy z listami.

FUNKCJA ODWROTNA

Funkcja Reverse odwraca elementy listy. Ma następujący format:

@nowa_lista = odwrotna(@Lista);

Funkcja Reverse odwraca listę i zwraca nową listę wynikową. Poniższy przykład ilustruje użycie funkcji odwrotnej:

@lista = odwróć(1..5); # Wynik 5,4,3,2,1 @list = odwrotna(@lista); # Wynik 1,2,3,4,5

FUNKCJA SORTOWANIA

Funkcja sort sortuje elementy listy. Ma następujący format:

@nowa_lista = sortuj(@Lista);

@new_list = sort(Podprogram @List);

@new_list = sort(BlockStatement @List);

Funkcja sort umieszcza elementy na liście, porządkując je według numerów znaków porządkowych w tabeli ASCII. Podobnie jak funkcja odwrotna, funkcja sortowania zwraca nową listę jako jej wartość i nie ma wpływu na oryginalną listę. Poniższy przykład ilustruje użycie funkcji sortowania:

@lista = sortowanie(1,5,2,3,4); # Wynik 1,2,3,4,5 @list = sort(1,2,10); # Sortowanie 1,10,2 w ASCII

W podprogramie lub bloku można zmienić kolejność sortowania. Poniższy przykład ilustruje użycie funkcji sortowania.

@lista = sortowanie(($a<=>$b) (2,1,10)); # @lista 1,2,10 @lista = sort(($b<=>$a)) (2,1,10); # @list 10,2,1 sub mycomp ( $b<=>$a) @list = sort(mycomp (2,1,10)); # @lista 10,2,1

FUNKCJE DO PRACY Z TABLAMI

Jak wiadomo, tablica to struktura danych zawierająca jedną lub więcej wartości tego samego typu, na przykład 100 nazwisk uczniów. Perl zawiera kilka wbudowanych funkcji, które pomagają pracować z elementami tablicy. W poniższych sekcjach omówiono kilka podstawowych funkcji przetwarzania tablic.

FUNKCJE PUSH I POP

Skrypty Perla wykorzystują fikcje push i pop do dodawania i usuwania elementów z końca tablicy. Innymi słowy, funkcje push i pop umożliwiają skryptom wykonywanie operacji skumulowanych na zasadzie „ostatnie weszło, pierwsze wyszło”. Funkcja push ma następujący format:

Push(@TABLICA, LISTA);

Poniższy fragment ilustruje użycie funkcji Push:

@lista = (); push(@lista,10,20); # @lista jest teraz (10,20) push(@lista,1..3); # @lista jest teraz (10,20,1,2,3)

Natomiast funkcja pop usuwa element, który jako ostatni został wypchnięty na stos i zwraca wartość tego elementu. Funkcja pop ma następujący format:

$wartość = pop(@ARRAY);

Poniższy fragment programu ilustruje użycie funkcji pop:

# Weźmy @list z poprzedniego przykładu print pop(@list); # Drukuj 3 print pop(@lista); # Drukuje 2 # Teraz @lista (10,20)

FUNKCJA PRZESUNIĘCIA

Funkcja shift usuwa i zwraca element z początku tablicy. Funkcja ta jest podobna do funkcji pop z tą tylko różnicą, że działa od początku tablicy zgodnie z zasadą FIFO (<первым вошел, первым вышел>). Funkcja przesunięcia ma następujący format:

$wartość = przesunięcie(@TAKCJA);

Poniższy fragment programu ilustruje zastosowanie funkcji shift:

# Weźmy @list z poprzedniego przykładu

Drukuj zmianę(@lista); # Wydrukuj 10 przesunięć drukowania(@lista); # Drukuje 20 # Teraz @list()

FUNKCJA COFNIĘCIA

Funkcja unshift dodaje jeden lub więcej elementów na początek tablicy. Ma następujący kod:

Unshift(@Array, Lista);

Poniższy fragment programu ilustruje użycie funkcji unshift:

# @lista = () cofnij przesunięcie(@lista,5,10,20); # @lista (5,10,20) unshift(@lista, 1..3); # @lista (1,2,3,5,10,20)

FUNKCJA ŁĄCZENIA

Skrypty Perla używają funkcji splotu do usuwania elementów z listy i zastąpienia ich elementami innej listy. Ma następujący format:

Splice(@Array, Offset[, Count[, List]]);

Funkcja splice usuwa określoną liczbę elementów (Count) z tablicy (@Array), zaczynając od elementu wskazywanego przez wartość przesunięcia (Offset), i zastępuje te elementy elementami innej listy (List). Jeśli wywołanie funkcji nie określi parametru Count, funkcja pobiera elementy aż do samego końca tablicy. Jeżeli wywołanie funkcji nie określi listy, której elementy zastąpią elementy oryginalne, to funkcja nie doda żadnych elementów do oryginalnej listy. Poniższe wyrażenie ilustruje użycie funkcji splotu:

@lista = 1..10; splot(@lista,1,8,5,6); # @lista = (1,5,6,10)

FUNKCJA SKALARNA

Funkcja skalarna określa liczbę elementów na liście. Ma następujący format:

Wynik = skalar(Lista);

Zazwyczaj skrypty Perla nie muszą używać funkcji skalarnej z tablicami, ponieważ gdy skrypt uzyskuje dostęp do tablicy, zapisując ją w kontekście skalarnym, zwraca liczbę elementów tablicy. Jednak skrypty mogą używać funkcji skalarnej w przypadkach, gdy kontekst jest niejednoznaczny lub jeśli lista nie jest tablicą. Poniższe wyrażenie ilustruje użycie funkcji skalarnej.

@lista = 1..10; wydrukuj skalar(@lista); # Drukuje rozmiar @listy

FUNKCJA GREP

Funkcja grep filtruje listę elementów, dla których dane wyrażenie ma wartość<ложно>. Ma następujący format:

@list = grep(Wyrażenie, Lista);

Funkcja grep iteruje po elementach listy, podstawiając je jako argumenty do danego wyrażenia. Funkcja grep przypisuje bieżące wyrażenie elementu listy do zmiennej $_ i ocenia podane wyrażenie. Jeśli wynikowe wyrażenie jest prawdziwe, funkcja grep dodaje ten element do wynikowej listy.Poniższy fragment programu ilustruje użycie funkcji grep:

@list = grep($_ i 1, 1..10); # @lista (1,3,5,7,9) @lista = („a”, „” „b”); # @list("a"," "","b") @list = grep($_ eq "", @list); # @list("a","b")

Uwaga: Jeśli wyrażenie, modyfikuje zmienną. $_, wówczas oryginalna lista również zostanie zmodyfikowana.

FUNKCJE PRZETWARZANIA TABLII ASORCJACYJNYCH

Jak wiadomo, tablice asocjacyjne to takie tablice, w których indeksem nie jest wartość liczbowa, ale np. nazwa. Perl ma kilka wbudowanych funkcji, które ułatwiają skryptom obsługę tablic asocjacyjnych.

FUNKCJE KLUCZY

Funkcja kluczy zwraca wartości kluczy odpowiadające tablicy asocjacyjnej. Ma następujący format:

@key_list = klucze(%tablica);

Funkcja kluczy zwraca tablicę kluczy w postaci zwykłej listy. Poniższy fragment programu ilustruje użycie funkcji klawiszy:

$wieki("Bob") = 25; $wieki("Maria") = 30; $wieki("Zack") = 15; @list = klucze(%wieków); # @lista będzie wynosić "Zack", "Bob", "Mary" @list = klucze sortowania %wieków # @ lista "Bob", "Mary", "Zack" dla $klucza (klucze sortowania %wieków) ( drukuj "$ klucz to $ages($key)\n" )

FUNKCJA WARTOŚCI

Funkcja wartości zwraca zwykłą tablicę składającą się z wartości tablicy asocjacyjnej. Ma następujący format:

@value_list = wartości(%tablica)

Funkcja wartości zwraca tablicę wartości tablicy asocjacyjnej w postaci zwykłej listy. Poniższy fragment programu ilustruje zastosowanie funkcji wartości:

# Użyj wartości z poprzedniego przykładu %ages = („Bob”, 25, „Mary”, 30, „Zack”, 15); @list = sortuj wartości% wieków; # @lista (15, 25, 30) @lista = %wieków; # @list("Zack", 15, "Bob", 25, "Maria", 30)

KAŻDA FUNKCJA

Funkcja each iteruje po elementach tablicy asocjacyjnej. Ma następujący format:

@key_values ​​​​= każdy(%Array);

Ilekroć skrypt wywołuje funkcję each, zwraca listę dwóch komponentów zawierających parę klucz-wartość. Gdy funkcja osiągnie koniec listy, zwraca pustą listę. Przy następnym wywołaniu funkcji proces iteracji rozpocznie się od nowa. Poniższy fragment programu ilustruje użycie każdej funkcji:

# Użyj wartości z poprzedniego przykładu %ages = („Bob”, 25, „Mary”, 30, „Zack”, 15); while (($imię, $wiek) = każdy %wiek) ( # Wydrukuj wieki print "$klucz to $wieki($klucz)\n"; )

USUŃ FUNKCJĘ

Funkcja usuwania usuwa elementy tablicy asocjacyjnej. Ma następujący format:

Usuń tablicę $ (klucz)

Poniższa instrukcja wykorzystuje funkcję usuwania w celu usunięcia elementu odpowiadającego kluczowi Bob z tablicy asocjacyjnej $Employees:

Usuń $Pracowników("Bob")

ARGUMENTY LINII POLECEŃ

Skrypty Perla mogą łatwo uzyskać dostęp do argumentów wiersza poleceń. Za każdym razem, gdy uruchamiany jest skrypt, Perl umieszcza argumenty wiersza poleceń skryptu w zmiennej listowej @ARGV. Do wyświetlenia na wyświetlaczu argumentów wiersza poleceń używany jest następujący fragment programu:

Podczas gdy ($arg = przesunięcie @ARGV) ( drukuj „$arg\n”; )

DOSTĘP DO ZMIENNYCH ŚRODOWISKOWYCH

Dostęp do zmiennych środowiskowych w skryptach Perla jest również bardzo łatwy. Za każdym razem, gdy uruchamiany jest skrypt, Perl umieszcza kopie zmiennych środowiskowych w tablicy asocjacyjnej zwanej %ENV. Poniższa instrukcja wykorzystuje tablicę %ENV do wyświetlenia bieżącego katalogu:

Wydrukuj „$ENV(Ścieżka)\n”; # Wydrukuj bieżący katalog

Oprócz pobierania wartości z tablicy %ENV, skrypty mogą także modyfikować elementy tablicy. Takie zmiany w tablicy %ENV spowodują zmianę ustawienia zmiennej środowiskowej dla każdego procesu potomnego utworzonego przez skrypt. Na przykład, następna instrukcja używa tablicy %ENV do zmiany bieżącej ścieżki:

$ENV(PATH) = "c:\\myexec;".$ENV(PATH);

Uwaga: Zmiany wprowadzone przez skrypt w tablicy %ENV nie będą miały wpływu na oryginalne zmienne środowiskowe. Innymi słowy, po zakończeniu działania skryptu zmienne środowiskowe systemu nie ulegną zmianie.

WEJŚCIE I WYJŚCIE PLIKU

Perl został specjalnie zaprojektowany jako odpowiednie narzędzie do odczytu i zapisu plików tekstowych. Jednakże, jak dowiesz się później, Perl wykonuje funkcje dostępu losowego i operacji we/wy plików binarnych. Operacje na plikach wymagają uchwytu pliku, czyli zmiennej odpowiadającej konkretnemu plikowi. Domyślnie każdy skrypt Perla ma trzy standardowe wskaźniki, które Perl automatycznie otwiera po uruchomieniu skryptu: STDIN, STDOUT, STDERR. Te trzy standardowe wskaźniki odpowiadają standardowym strumieniom STDIN, STDOUT, STDERR języka programowania C. Ponadto skrypt Perla może otwierać dodatkowe wskaźniki do innych określonych plików.

OTWARCIE PLIKÓW I INNYCH STRUMIENI

Aby skrypt mógł skorzystać z pliku, musi wywołać funkcję open. To wygląda tak:

Otwórz(UchwytPliku[,NazwaPliku])

W przeciwieństwie do funkcji otwierania biblioteki środowiska wykonawczego C, funkcja open Perla nie zawiera parametru mode w wywołaniu funkcji. Perl określa tryb otwarcia pliku na podstawie jego nazwy. Tabela 12.3 ilustruje związek pomiędzy trybem otwierania pliku a nazwą pliku.

Tabela 12.3. Konwencje nazewnictwa plików Perla i tryby dostępu


-Uwaga: tryb przepływu w rurze może nie być dostępny we wszystkich systemach.

Jeśli w wywołaniu funkcji open pominięto nazwę pliku, Perl zakłada, że ​​nazwa pliku jest zawarta w zmiennej łańcuchowej $FileHandle. Kiedy skrypt zakończy korzystanie z pliku, zamyka go za pomocą funkcji zamknięcia, jak pokazano poniżej:

Zamknij (uchwyt pliku);

Fragment programu ilustruje użycie funkcji otwierania i zamykania:

Open(InFile, „test.dat”) || umierać; # otwarte do odczytu # test.dat open(OutFile, ">test.dat") || umierać; # utwórz plik testowy $AuxFile = ">>test.dat"; open(Aux, $AuxFile) || umierać; # otwiera się do zakończenia # test.dat blisko(InFile); zamknij (plik wyjściowy); zamknij(Aux);

Należy pamiętać, że wskaźniki plików nie mają zwykłych jednoznakowych przedrostków. Jak dowiesz się później, skrypty Perla mogą przechowywać nazwy wskaźników w postaci łańcuchów zmiennych skalarnych i przekazywać wskaźnik do dowolnej funkcji, która może je przetworzyć. Jeśli to konieczne, Perl dokona konwersji wartości.

W systemie MS-DOS Perl obsługuje dodatkową funkcję zwaną trybem hin, która umożliwia przełączanie wejścia/wyjścia pliku między trybem tekstowym i binarnym. W większości systemów rozróżnienie między trybem tekstowym i binarnym nie ma znaczenia. Jednakże w systemie operacyjnym MS-DOS znak nowej linii jest sekwencją dwóch znaków (CR+LF). Ponieważ większość programów nie spodziewa się, że na końcu linii pojawią się dwa znaki, system we/wy musi przeprowadzić konwersję. Aby skorzystać z funkcji binmode, należy otworzyć odpowiedni wskaźnik. Funkcja binmode ma następujący format:

Tryb binarny (uchwyt pliku);

ODCZYT I ZAPIS DANYCH LINIA-LINIA

Najprostszym sposobem, aby skrypt odczytał linię z pliku, jest użycie operatora . W Perlu wskaźnik pliku otoczony nawiasami trójkątnymi staje się symbolem wejściowym. Na przykład poniższy fragment programu ilustruje użycie znaku wejściowego do odczytu i wyświetlenia zawartości pliku Test.dat.

Open(InFile, „Test.dat”) || umierać; podczas gdy ($linia = ) ( print $line; # Drukuje linię z pliku ) close(InFile);

Gdy znak wejściowy dotrze do końca pliku, zwraca wartość false, co w tym przypadku kończy wykonywanie pętli while. Istnieje specjalny (pusty) znak wejściowy oznaczony przez<>, który ma bardzo wyspecjalizowaną, ale użyteczną aplikację. Za pierwszym razem skrypt używa pustego znaku wejściowego<>, analizuje argumenty wiersza poleceń. Jeżeli ciąg @ARGV jest pusty, wówczas wprowadzany jest znak<>czyta ze STDIN. Jeśli zamiast tego @ARGV nie jest pusty, Perl otwiera pierwszy z plików określonych w zmiennej @ARGV i czyta zawartość pliku. Kiedy Perl zakończy przetwarzanie jednego pliku, przechodzi do następnego.Po tym jak skrypt odczyta wszystkie pliki, pojawia się symbol<>zwraca wartość fałszywą. Skrypty Perla mogą również używać znaku wejściowego do wczytywania całej zawartości pliku do tablicy, dzięki czemu każda linia pliku staje się elementem tablicy. Na przykład poniższa instrukcja odczytuje plik STDIN do tablicy @lines:

@linie = ;

Zapisywanie danych do pliku jest również dość proste. W rzeczywistości robiłeś to za każdym razem, gdy korzystałeś z funkcji drukowania. Pełny format funkcji drukowania jest następujący:

Drukuj listę;

Jeśli funkcja print nie otrzyma wskaźnika pliku jako argumentu, wysyła dane wyjściowe do STDOUT. Poniższy fragment programu ilustruje użycie funkcji print w celu dołączenia danych do pliku wyjściowego:

Open(LogFile, ">>logfile.dat") || umierać; ############## ($m, $d, $y) = (czas lokalny(czas)) ; print LogFile "Dziennik kapitana, data gwiezdna ++m$/$d/$y\n"; zamknij(LogFile);

Uwaga: Wskaźnik pliku i lista wyników nie są oddzielone przecinkiem.

ODCZYT I ZAPIS BLOKÓW DANYCH

Programiści często traktują pliki tekstowe jako strumienie tekstu po prostu dlatego, że jeden znak następuje po drugim, aż do znacznika końca pliku. Jeśli skrypt musi działać z plikiem zorientowanym blokowo, a nie wątkowo, wówczas skrypt może używać funkcji sysread i syswrite do przetwarzania stałych bloków danych. Funkcje sysread i syswrite mają następujące formaty:

$result = sysread(FileHandle, $Var, Długość[, Przesunięcie]); $result = syswrite(FileHandle, $Var, Długość[, Przesunięcie]);

Jeżeli wywołanie funkcji określa przesunięcie od początku pliku (Offset), wówczas funkcje będą szukać lokalizacji, od której rozpoczną operacje we/wy. Funkcje sysread i syswrite przekazują dane przy użyciu skalarnej zmiennej łańcuchowej. Ponieważ funkcje przetwarzają stałe bloki pamięci, dane mogą zawierać wartości binarne, w tym zera i znaczniki końca pliku. Jeżeli wywołanie funkcji określa przesunięcie od początku pliku (Offset), to funkcja szuka w pliku lokalizacji, od której rozpoczyna wykonywanie operacji we/wy. Jeśli pracujesz z blokami danych, skrypty mogą również wykorzystywać następujące funkcje we/wy:

$result = search(Uchwyt pliku, pozycja, podstawa); $result = tell(UchwytPliku); $wynik = eof(UchwytPliku);

Funkcja wyszukiwania działa dokładnie tak samo, jak funkcja fseek z biblioteki wykonawczej C. Parametr Position określa położenie względem początku, który z kolei jest określany przez parametr Base w następujący sposób:


- 0 Szukaj od początku plików
- 1 Szukaj od aktualnej pozycji
- 2 Szukaj od końca pliku

Funkcja tell w Perlu działa dokładnie tak, jak funkcja ftel w bibliotece wykonawczej C. Ta funkcja zwraca bieżącą pozycję w pliku, z którego wykonywana jest operacja odczytu lub zapisu. Wreszcie funkcja eof, podobnie jak funkcja feof w języku C, zwraca wartość<истинно>Lub<ложино>, którego skrypt może użyć do określenia, kiedy plik osiągnął koniec.

PRZETWARZANIE DANYCH BINARNYCH

Chociaż Perl koncentruje się głównie na przetwarzaniu tekstu, może również przetwarzać dane binarne. Skrypty mogą przenosić dane binarne w porcjach przy użyciu zmiennych łańcuchowych i wykonywać operacje we/wy na bajtach przy użyciu funkcji sysread i syswrite. Jednak żeby cokolwiek osiągnąć<полезное>w przypadku danych skrypt jest zmuszony przekonwertować dane na własne<родные>formaty skalarne.

BINARNE PRZECHOWYWANIE DANYCH

Kiedy skrypt Perla odczytuje blok danych binarnych za pomocą funkcji sysread, umieszcza te dane binarne w skalarnej zmiennej łańcuchowej. Perla nie interesuje, czy są one podane, czy zawierają wartości null czy inne niż ASCII. W ciągu znaków Perl akceptuje bajty jako bajty. W przeciwieństwie do C, Perl nie używa ciągów znaków zakończonych znakiem null. Jeśli dane są w formacie ASCII, skrypt może je przetworzyć jak dowolny tekst, ale jeśli dane są binarne, skrypt musi je zdekompresować, zanim Perl będzie mógł je przetworzyć.

ROZPAKOWANIE BINARNYCH CIĄGÓW DANYCH DO ZMIENNYCH Perla

Aby skrypt uzyskał dostęp do danych binarnych, musi je rozpakować do własnego formatu skalarnego. Skrypty Perla rozpakowują dane za pomocą funkcji unpack, która ma następujący format:

$result = rozpakuj (szablon, wyrażenie);

Wyrażenie to zwykła zmienna łańcuchowa, która przechowuje dane binarne odczytywane przez funkcję sysread, ale może być również wyrażeniem, które należy interpretować jako ciąg znaków. Szablon to ciąg znaków szablonu opisujący sposób interpretacji wartości w operandzie Wyrażenia Poniższy fragment programu ilustruje użycie funkcji unpack:

($r, $g, $b) = unpack("C3", $color);# rozpakuje się do 3 znaków
- @longwords = rozpakuj("L*", $dane); # rozpakowuje do listy długich # słów @stuff = unpack("S2L", $bin); # rozpakuje się na 2 krótkie i długie

Po każdym znaku wzorca może następować liczba wskazująca, ile razy należy użyć tego znaku. Jeżeli zamiast liczby widnieje gwiazdka (*), operacja zostanie wykonana na wszystkich pozostałych danych w wierszu. Jeżeli numer nie zostanie podany, wówczas jest on wykonywany jednorazowo. Skrypt może umieścić dowolną liczbę znaków wzorca w ciągu szablonu. Tabela 12.4 zawiera listę symboli zawartych w parametr ciągu Szablon wraz z opisem wpływu każdego z nich na wykonanie funkcji rozpakowania.

Tabela 12.4. Symbole wzorów

Symbol wzoru Opis
A
A Ciąg ASCII bez znaku null
B Ciąg bitów (LSB jest na pierwszym miejscu)
W Ciąg bitów (najbardziej znaczący bit jest pierwszy)
Z Znak jednobajtowy ze znakiem
Z Jednobajtowy znak bez znaku
D Liczba zmiennoprzecinkowa, podwójna precyzja
F Wartość zmiennoprzecinkowa, wzór o pojedynczej precyzji
H Ciąg szesnastkowy (najpierw cyfry z najniższej półki)
N Ciąg szesnastkowy (najpierw najbardziej znaczące bity)
I Liczba całkowita ze znakiem
I Liczba całkowita bez znaku
l Liczba całkowita ze znakiem typu long
L To samo, tylko bez znaku
N Krótka liczba całkowita
N Długa liczba całkowita
P Wskaźnik do ciągu
S Krótka liczba całkowita ze znakiem
S Krótka liczba całkowita bez znaku
ty Dekodowanie ciągu
w Krótka liczba całkowita
V Długa liczba całkowita
X Przeskocz o jeden bajt do przodu
X Przejdź o jeden bajt do tyłu
@ Przejdź do określonej pozycji w linii

PAKOWANIE DANYCH W ŁAŃCUCHY BINARNE

Aby wyprowadzić dane binarne, skrypt musi spakować wartości skalarne do ciągów znaków binarnych. Aby to zrobić, użyj funkcji pack, której format podano poniżej:

$wynik = paczka(Szablon, Lista);

Poniższy fragment programu ilustruje użycie funkcji pack:

$kolor = paczka("C3", $r, $g, $b); $data = paczka("L*", @długie słowo); $bin = paczka("S2L", @rzeczy);

Funkcja pack używa tych samych znaków wzorca, co funkcja unpack, z wyjątkiem znaków a. A, u, x, x, @.

PRACA Z KATALOGAMI

Perl zapewnia nie tylko szeroką gamę funkcji przetwarzania plików, ale także niektóre bardzo wygodne funkcje do skanowania katalogów. W kolejnych rozdziałach przyjrzymy się szczegółowo niektórym głównym funkcjom pracy z katalogami.

OTWARCIE, PRZECZYTANIE I ZAMYKANIE KATALOGÓW

Skrypty Perla umożliwiają otwieranie i odczytywanie zawartości plików. Podobnie skrypty te otwierają katalogi i odczytują nazwy zawartych w nich plików. Aby otworzyć katalog, skrypty używają funkcji opendir, przekazując do niego wskaźnik katalogu i ścieżkę. Do czytania lista plików zawartych w katalogu, skrypt używa funkcji readdir. Na koniec funkcjacloser służy do zamykania katalogu. Poniższy fragment programu ilustruje użycie funkcji readdir do wyświetlenia listy plików w bieżącym katalogu:

Opendir(katalog, $INC) || umierać; while ($plik = readdir(Dir)) ( print "$file \n" ) zamkniętyir(Dir);

Ten fragment używa zmiennej $INC, aby uzyskać dostęp do bieżącego katalogu. Zmieniając $INC na $ARGV, skrypt wyświetli listę plików zawartych w katalogu określonym w wierszu poleceń.

Oprócz omówionych powyżej funkcji katalogowych Perl oferuje zestaw funkcji, które pozwalają na umiejscowienie bieżącego indeksu na liście katalogów:

$result = katalog_przewijania(UchwytKatalogu); $wynik = telldir(UchwytKatalogu); $wynik = szukanykatalog(Uchwyt Katalogu, Pozycja);

SFORMATOWANE WYJŚCIE

W tym rozdziale poznałeś kilka sposobów formatowania wyników skryptu za pomocą funkcji drukowania. Podobnie jak C, Perl obsługuje także funkcje printf i sprintf.Ponadto Perl obsługuje także generowanie raportów opartych na kolumnach przy użyciu szablonów formularzy.

KORZYSTANIE Z FUNKCJI DRUKOWANIA

Skrypty opisane w tym rozdziale szeroko wykorzystywały funkcję drukowania. Ponadto Perl udostępnia specjalne zmienne, które wpływają na działanie funkcji drukowania. Tabela 12.5 krótko charakteryzuje te specjalne zmienne.

Tabela 12,5. Specjalne zmienne sterujące funkcją drukowania

Aby skorzystać z tych specjalnych zmiennych, wystarczy przypisać im żądane wartości. Na przykład następujący fragment programu używa zmiennej $ do określenia separatora pomiędzy elementami druku:

$, = "*"; @lista = 1..10; drukuj @listę; # Drukuje 1*2*3*4*5*6*7*8*9*10

Okazuje się, że zmienna $ faktycznie wpływa na wszystkie linie, a nie tylko na te, które są drukowane. Jednak najczęściej będziesz go używać do zmiany wartości wyjściowej przez funkcję drukowania.

FORMATOWANE WYPROWADZENIE DANYCH PRZY POMOCY FUNKCJI PRINTF

Perl posiada funkcje printf i sprintf, które są bardzo podobne do odpowiednich funkcji biblioteki wykonawczej C. Mają następujący format: $result = printf(Format, Lista); $wynik = sprintf(Format, Lista);

Domyślnie funkcja printf wysyła sformatowane wyjście do STDIO, a funkcja sprintf zwraca sformatowany ciąg znaków. W obu przypadkach format ciągu jest prawie identyczny z funkcjami języka C, z tą różnicą, że funkcje języka Perl nie obsługują specyfikatora długości (*). Poniższy fragment programu ilustruje użycie funkcji printf i sprintf.

$precyzja = 2; $pi = 3,1415; printf("%.2f\n", $pi); # wypisze 3.14 printf("%.$(precyzja)f", $pi); # wyświetli 3.14

WYWOŁYWANIE PROGRAMÓW ZEWNĘTRZNYCH ZE SKRYPTÓW W PERLU

W pewnym sensie zastępuje skrypty powłoki, Perl zapewnia wsparcie interakcja systemu, łącznie z połączeniem programy zewnętrzne. W poniższych sekcjach omówiono kilka sposobów wywoływania programów zewnętrznych z Skrypty Perla. Pamiętaj jednak, że zezwalając skryptom na wykonywanie poleceń systemowych, otwierasz luki w zabezpieczeniach swojego hosta. Trzymaj się tego główna zasada nie wykonuj zewnętrznych poleceń ze skryptu Perla. Jeżeli jednak zostaniesz zmuszony do wykonania poleceń zewnętrznych ze skryptu, możesz w tym celu skorzystać z poleceń wbudowanych. funkcje systemu, exec lub fork.

WYRAŻENIA REGULARNE

W tym rozdziale widziałeś przykłady funkcji przetwarzających ciągi znaków. Wiele z nich opiera się na koncepcji wyrażeń regularnych. Jak widać z poniższych sekcji, skrypty Perla w szerokim zakresie wykorzystują wyrażenia regularne do przetwarzania tekstu. Jeśli wyrażenia regularne są dla Ciebie nowością, nie martw się. Po krótkim czasie, po przejrzeniu kilku sekcji tego rozdziału, wyrażenia regularne staną się łatwe do zrozumienia.

PRZEGLĄD WYRAŻEŃ REGULARNYCH

Wyrażenia regularne to fantazyjny termin wywodzący się z informatyki i odnoszący się do układu znaków. Skrypty Perla używają wzorców znaków po prostu do analizowania danych wejściowych i dzielenia ich na kawałki. Często skrypt może analizować dane wejściowe na podstawie spacji, przecinków, tabulacji i innych ograniczników. Gdy jednak dane wejściowe mają dowolny format, wówczas najlepiej radzą sobie z tym wyrażeniem regularnym.

SKŁADNIA WYRAŻEŃ REGULARNYCH

Aby zmniejszyć rozmiar wyrażeń regularnych, Perl używa znaków specjalnych. Tabela 12.6 zawiera listę niektórych symboli używanych w skryptach Perla wyrażenia regularne X.

Tabela 12.6. Symbole używane w wyrażeniach regularnych

Symbol Opis
. Dopasowuje dowolny znak (z wyjątkiem nowej linii)
(..) Grupuje sekwencję elementów
+ Spełnia poprzedni wzór jeden lub duża ilość raz

-
Dopasowuje wzorzec zero lub jeden razy
* Dopasowuje wzorzec jeden lub zero razy
[...] Pasuje do znaku z danego zestawu
[^...] Dopasowuje znak ze zbioru uzyskanego przez negację
(...|...|...) Pasuje do jednej z alternatyw
^ Dopasowuje początek ciągu
$ Pasuje do wzoru na końcu linii
(n, m) Dopasowuje wzór n do m razy
(N) Pasuje do wzorca dokładnie n razy
(N,) Pasuje do wzorca co najmniej n razy
\n\tetd. Pasuje do nowej linii, tabulatora itp.
\B Dopasowuje się do granic słów
\B Dopasowuje się do granic słów
\D Odpowiada figurze
\D Nie pasuje do numeru
\S Pasuje do przestrzeni
\S Dopasowuje nie spację
\w Dopasowuje literę lub cyfrę
\W Dopasowuje znak, który nie jest ani literą, ani cyfrą

Perl umieszcza wyrażenia regularne (wzorce) w ukośnikach, czyli na przykład w postaci /wzorzec/. Poniższy fragment programu ilustruje wyrażenia regularne Perla:

# poniższe wyrażenia regularne są prawdziwe, jeśli: /ig/ # ciąg znaków zawiera „ig” /(b|d|f)ig/ # ciąg znaków zawiera „big”, „dig” lub „fig” /+/ # ciąg znaków zawiera liczbę /*/ # ciąg zawiera identyfikator

Jeśli te wyrażenia nie mają dla Ciebie sensu, nie martw się. W tym rozdziale przyjrzymy się kilku wyrażeniom regularnym. Na razie pamiętaj tylko, że Perl umieszcza wyrażenia regularne pomiędzy dwoma ukośnikami, jak pokazano powyżej.

UŻYWANIE WYRAŻEŃ REGULARNYCH DO WYSZUKIWANIA SŁÓW KLUCZOWYCH

Skrypty Perla używają wyrażeń regularnych, aby ułatwić porównywanie ciągów. Aby sprawdzić, czy ciąg znaków zawiera dany wzorzec, skrypt może użyć wyrażeń regularnych takich jak to:

Jeśli ($str =~ /wzór/)

W tym przypadku wyrażenia regularne przyjmują wartość<истинно>jeśli wzorzec zostanie znaleziony w ciągu znaków ($str). Jeśli ciąg znaków zawiera wzorzec, wyrażenie zwraca wartość<ложно>. Na przykład poniższe wyrażenie sprawdza, czy ciąg zawiera tekst WebProgramming:

If ($str =~ /Programowanie WWW/)

Aby sprawdzić dokładne dopasowanie, wyrażenie musi powiązać porównanie z początkiem i końcem ciągu. Na przykład następujące wyrażenie ma wartość<истинно>, wtedy i tylko wtedy, gdy zmienna $str przyjmuje jedną z trzech wartości: , ) :

($str =~ /^ba(na) (2,4)$/)

Podobnie poniższe wyrażenie jest prawdziwe wtedy i tylko wtedy, gdy $str zawiera słowo i nie jest częścią innego słowa, np .

($str =~ /\b\b/)

STOSOWANIE WYRAŻEŃ REGULARNYCH DO ANALIZY DANYCH WEJŚCIOWYCH

W miarę jak skrypty Perla staną się bardziej złożone, w wielu przypadkach będziesz chciał wiedzieć więcej niż tylko sprawdzanie, czy wzorzec pasuje do ciągu znaków, czy nie. Na przykład możesz chcieć, aby skrypt wyodrębnił określoną wartość ciągu. Używając grupowania znaków () w wyrażeniu regularnym, skrypt może wyodrębnić pasujące wartości z ciągu i utworzyć ich listę. Na przykład następujący fragment programu używa wyrażeń regularnych do wyodrębniania miesięcy, dni i lat z listy:

$str = "1 stycznia 1997",; ($m, $d, $y) = $str =~ /\s*(\S*)\s + (\d+)\D + (\d(4))/;


- Najpierw pomiń którykolwiek specjalny charakter;
- wpisz wszystkie znaki inne niż specjalne do zmiennej $m
- (zmienna wskazująca miesiące);
- pomiń znak specjalny;
- umieść wszystkie liczby w zmiennej $d (zmienna dla dni rejestracji);
- pomiń wszystkie znaki niebędące cyframi;
- wpisz cztery cyfry do zmiennej $y (zmienna wskazująca lata).

Perl obsługuje także inną formę dopasowywania wzorców, używając operatora (=~), który dodaje negację wyniku: (!~). Ten operator jest odpowiednikiem wyrażenia!($str=~/pattern/).

WYRAŻENIA REGULARNE DO WYSZUKIWANIA I ZAMIANY CIĄGÓW

Do tej pory korzystałeś z operatorów dopasowujących wzorce. Okazuje się, że Perl obsługuje dwa inne wyrażenia regularne, które modyfikują testowaną zmienną łańcuchową. W poniższej instrukcji Perl zastępuje część łańcucha pasującą do wzorca dany ciąg:

$str =~ s/wzorzec/zastąpienie/;

Na przykład poniższa instrukcja zastąpi słowo NA :

$str =~ s/\bkolor\b/kolor/;

Mała modyfikacja pozwala na zamianę wszystkich słów NA :

$str =~ s/\bkolor\b/kolor/g;

W tym przypadku g na końcu wyrażenia informuje Perla, że ​​wymagane jest globalne podstawienie.

Używając przyrostka i, możesz określić, że w wyszukiwaniu będzie uwzględniana wielkość liter. Zamiast zwykłego sprawdzania wzorca, poniższe wyrażenie również dokonuje zamiany:

$str =~ tr/SearchList/ReplacementList/;

Na przykład zastąpienie wszystkich małych liter tymi samymi wielkimi znakami można wykonać w następujący sposób:

$str =~ tr/a-z/A-Z/; # zmienia wielkość liter z małej na górną

Rozważmy dla siebie następujący przykład:

$litery = "abcde"; print "$litery\n" # Drukuj abcde $litery =~ tr/a-z/A-Z/; print "$litery\n" # Wydrukuj ABCDE

STRESZCZENIE

W tym rozdziale znajdziesz wprowadzenie do programowania w Perlu. Korzystając z omówionych tutaj koncepcji, możesz pisać złożone skrypty CGI w Perlu. Następny rozdział pomoże Ci zdobyć umiejętności tworzenia skryptów CGI w Perlu, które możesz uruchamiać na własnym serwerze. Zanim przejdziesz dalej, upewnij się, że rozumiesz następujące kluczowe pojęcia:

Perl to interpretowany język programowania używany przez programistów do pisania skryptów dla sieci i Internetu.

Konstrukcje Perla pod wieloma względami przypominają konstrukcje języka C, ale Perl oferuje wiele dodatkowych funkcji, szczególnie do obsługi ciągów znaków i plików, które trudno znaleźć w C.

Perl jest podstawowym językiem do pisania programów CGI dla sieci i Internetu, przede wszystkim ze względu na jego elastyczność, kompaktowy styl i wysoki poziom bezpieczeństwa.

NIEZBĘDNE STRONY INTERNETOWE Z INFORMACJAMI O PERL

Poniższe strony internetowe pomogą Ci znaleźć informacje o interesujących Cię szczegółach dotyczących języka Pcrl, jego skryptów, a także szczegółowe informacje o zasobach języka Perl 5 i jego bibliotekach. Użyj tych witryn sieci Web jako punktu wyjścia do wyszukiwania.

STRESZCZENIE

W tym rozdziale nauczyłeś się używać Perla do pisania dość złożonych skryptów CGI. Korzystając z technologii, którą znasz, możesz świadczyć usługi programistyczne na profesjonalnym poziomie swoim klientom, którzy chcą, aby ich firma była reprezentowana w Internecie. Rozdział 14 wprowadza Cię w język Java. Jak sam zobaczysz Język Java dobrze nadaje się do tworzenia Strony internetowe zawierające animacje i multimedia. Dodatkowo w rozdziale 14 przedstawiono kolejny język do pisania skryptów JavaScript. Zanim jednak przejdziesz do rozdziału 14, upewnij się, że rozumiesz następujące kluczowe pojęcia:
- Perl to wszechstronny i elastyczny język programowania, którego można używać do tworzenia skryptów CGI dla Internetu, a także tradycyjnych programów do codziennego użytku.

  • Perl doskonale nadaje się do przetwarzania tekstu, dostępu do baz danych, jest przenośny i zapewnia bezpieczeństwo podczas pracy w sieci. Wszystkie te cechy są ważne w programowaniu internetowym.
  • Skrypty Perla powszechnie używają wyrażeń regularnych do przetwarzania tekstu.
  • Większość skryptów w Internecie jest obecnie napisana w języku Perl. Jednak języki takie jak JavaScript i VBScript mogą wkroczyć w monopol Perla.