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"; # 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 " | \n"; drukuj " \n"; ) # Pozostaje wydrukować końcowy wydruk HTML<
|
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 PRINTFPerl 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.
|