IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   Perl. Æwiczenia
                                         praktyczne
           KATALOG KSI¥¯EK
                                         Autor: Krzysztof Juszkiewicz
                      KATALOG ONLINE     ISBN: 83-7197-946-0
                                         Format: B5, stron: 132
       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Je li chcesz rozpocz¹æ przygodê z programowaniem — zacznij naukê od Perla. Po kilku
                                         godzinach pracy przekonasz siê, ¿e dokona³e najlepszego wyboru. Perl posiada wielk¹
                                         zaletê, której brakuje konkurencyjnym narzêdziom: nie znaj¹c wszystkich jego
         CENNIK I INFORMACJE             niuansów mo¿esz pisaæ dzia³aj¹ce aplikacje.
                                         Larry Wall stworzy³ Perla dla osób, które s¹ niecierpliwe (programy w Perlu pisze siê
                   ZAMÓW INFORMACJE      bardzo szybko), leniwe (kod programów jest zwiêz³y, a ich tworzenie u³atwia ogromna
                     O NOWO CIACH        liczba gotowych modu³ów) i chc¹ byæ dumne z tego, co robi¹ (sam przekonasz siê, jak
                                         wiele satysfakcji dostarczy Ci programowanie w Perlu).
                       ZAMÓW CENNIK      Ksi¹¿ka przeznaczona jest dla pocz¹tkuj¹cych programistów. Dowiesz siê z niej jak
                                         zainstalowaæ Perla, a nastêpnie, krok po kroku, æwiczenie po æwiczeniu, zag³êbisz siê
                                         w jego wiat.
                 CZYTELNIA               Poznasz:
          FRAGMENTY KSI¥¯EK ONLINE          • Fundamenty jêzyka: zmienne, instrukcje i referencje
                                            • Wyra¿enia regularne, umo¿liwiaj¹ce szybkie przeszukiwanie tekstów i podmianê
                                              fragmentów
                                            • Sposoby korzystania z plików
                                            • Zasady pisania skryptów CGI
                                            • Wysy³anie e-maili za pomoc¹ Perla
                                            • £¹czenie Perla z bazami danych




Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
                       Wstęp.............................................................................................................................................................. 5
Rozdział 1.            Instalacja ...................................................................................................................................................... 7
                       Archiwum języka Perl — CPAN .................................................................................................8
                       ActivePerl...................................................................................................................................11
                       Uruchamianie skryptów .............................................................................................................16
                           Błędy podczas uruchamiania skryptów ...............................................................................18
                       Polskie znaki ..............................................................................................................................22

Rozdział 2. Zmienne.......................................................................................................................................................25
                       Zmienne skalarne .......................................................................................................................25
                       Tablice ........................................................................................................................................30
                       Tablice asocjacyjne ....................................................................................................................36

Rozdział 3. Instrukcje warunkowe i pętle.......................................................................................................... 41
Rozdział 4. Funkcje ........................................................................................................................................................ 47
Rozdział 5. Referencje ................................................................................................................................................ 53
                       Referencje skalarne ....................................................................................................................53
                       Referencje tablicowe ..................................................................................................................55
                       Referencje asocjacyjne ...............................................................................................................57
                       Zmienne wielowymiarowe .........................................................................................................58

Rozdział 6. Debugger ................................................................................................................................................... 63
                       Wykonywanie krokowe..............................................................................................................64
                       Czujki .........................................................................................................................................66
                       Wartości zmiennych ...................................................................................................................66

Rozdział 7.            Wyra enia regularne........................................................................................................................... 69
                       Sprawdzanie ...............................................................................................................................69
                       Zamiana ......................................................................................................................................78
                       Dzielenie.....................................................................................................................................80
                       Transliteracja ..............................................................................................................................81
4                                                                                                                                                    Perl. Ćwiczenia


Rozdział 8. Obsługa plików....................................................................................................................................... 85
                       Sprawdzanie i zmiana atrybutów ...............................................................................................85
                       Odczyt i zapis .............................................................................................................................91
                       Ograniczanie dostępu .................................................................................................................96
                       Pliki binarne ...............................................................................................................................98

Rozdział 9. WWW........................................................................................................................................................... 101
                       Moduł CGI ...............................................................................................................................102

Rozdział 10. Poczta elektroniczna .......................................................................................................................... 113
Rozdział 11. Inne usługi sieciowe.......................................................................................................................... 121
Rozdział 12. Bazy danych............................................................................................................................................. 127
7.                                 Rozdział

                          Wyra enia regularne
            Język Perl jest dobrze przystosowany do przetwarzania tekstów. Jego główną zaletą wią ącą
            się z tym zagadnieniem są wyra enia regularne. Ich istotą jest tworzenie wzorców opartych
            o ró ne symbole. Taki wzorzec jest dopasowywany do testowanego tekstu i w ten sposób
            mo na sprawdzać, czy dany tekst zawiera określone litery, znaki, grupy liter, słowa. Opie-
            rając się na wykonanym dopasowaniu (lub jego braku) mo na dodatkowo podmienić pa-
            sującą frazę na inną.




Sprawdzanie
Ćwiczenie 7.1.

            Sprawdź, czy w zmiennej region znajduje się słowo karp.

            Rozwiązanie
                   WUTDKPRGTN
                  TGIKQP  RQFMCTRCEMK 
                 KH 
 TGIKQP ` MCTR ]
                   RTKPV ,GUV MCTRP 
                 _

            Wartość zmiennej TGIKQP ustawiamy na RQFMCTRCEMK. W tym słowie znajduje się fraza
            MCTR, więc efekt sprawdzenia będzie pozytywny i na ekranie powinniśmy zobaczyć napis
            wygenerowany przez funkcję RTKPV.

            Do obsługi wyra eń regularnych u ywamy operatora składającego się ze znaku równości
            i tyldy (`). W niektórych edytorach mogą wystąpić problemy z wpisaniem znaku tyldy
            (`), gdy po naciśnięciu odpowiedniego klawisza nie pojawia się on na ekranie. Nale y
            wówczas oprócz właściwego klawisza u yć spacji.
70                                                                                      Perl. Ćwiczenia


           Po operatorze wyra enia regularnego piszemy samo wyra enie ujęte w ukośniki (). Wpisa-
           nie ciągu liter (tak jak w tym przypadku) spowoduje sprawdzenie, czy w danej zmiennej
           zawierającej ciąg znaków (RQFMCTRCEMK) występuje zadany podciąg (MCTR).

Ćwiczenie 7.2.

           Zbadaj, czy w zmiennej region nie ma słowa karp.

           Rozwiązanie
               WUTDKPRGTN
             KH
 TGIKQP ` MCTR ]
               RTKPV $TCM MCTRP 
             _

             KH
 TGIKQP ` MCTR ]
               RTKPV $TCM MCTRP 
             _

             WPNGUU
 TGIKQP ` MCTR ]
               RTKPV $TCM MCTRP 
             _

           W tym przypadku przedstawiono trzy alternatywne rozwiązania. Są one równowa ne.
           W pierwszym wierszu widzimy, e zastosowano operator `. Sprawdzamy zatem, czy
           gdziekolwiek w zmiennej TGIKQP nie ma układu liter MCTR. Ten sam efekt uzyskamy sto-
           sując wykrzyknik przed warunkiem (warunek drugi) oraz dzięki u yciu warunku nega-
           tywnego WPNGUU (jeśli nie).

Ćwiczenie 7.3.

           Prześledź, czy słowo karp znajduje się w zmiennej domyślnej.

           Rozwiązanie
               WUTDKPRGTN
              A  RQFMCTRCEMK 
             KH
MCTR ]
               RTKPV ,GUV MCTRP 
             _

           Zmienna domyślna to taka, której nazwa składa się jedynie z podkreślenia (A). Jeśli w takiej
           zmiennej umieścimy nasz tekst do sprawdzenia (RQFMCTRCEMK), nie trzeba stosować ope-
           ratora wyra enia regularnego (`), wystarczy jedynie samo wyra enie w ukośnikach.

Ćwiczenie 7.4.

           Przeanalizuj, czy odpowiedź zawarta w zmiennej odp jest twierdząca.
Rozdział 7.    Wyra enia regularne                                                                  71



              Rozwiązanie
                 WUTDKPRGTN
               KH
 QFR ` VCM ]
                 RTKPV ,GUV 1-P 
               _

              Sprawdzamy tutaj za pomocą wyra enia regularnego, czy odpowiedź zawiera słowo VCM. Nie
              mo emy mieć jednak pewności, czy odpowiedzią (wartość zmiennej QFR) nie była na
              przykład VCMV[MC lub VCMPKG. Powinniśmy zatem zastosować jeden z poni szych wierszy.
                 WUTDKPRGTN
               KH
 QFR GS VCM  ]
                 RTKPV ,GUV 1-P 
               _
               KH 
 QFR ` @VCM  ]
                 RTKPV ,GUV 1-P 
               _

              W pierwszym wierszu widzimy porównanie (GS) wartości zmiennej QFR i ciągu znaków VCM,
              natomiast w drugim warunku mamy do czynienia z adekwatnym wyra eniem regularnym.
              Zastosowanie daszka (@) i dolara ( ) oznacza w tym przypadku odpowiednio początek
              i koniec ciągu znaków. Innymi słowy, chcemy by słowo tak było dokładnie tym, co znajduje
              się w zmiennej QFR. Właśnie po to stosujemy znaki daszka i dolara.

              Istnieje jednak nadal mo liwość, e odpowiedź była twierdząca, a my tego nie stwierdzimy.
              Stanie się tak, gdy zmienna QFR będzie miała przykładowo wartość 6#- lub 6CM. Zaradzimy
              takiemu zjawisku u ywając innej konstrukcji.
                 WUTDKPRGTN
               KH 
 QFR ` @VCM K ]
                 RTKPV ,GUV 1-P 
               _

              Ró ni się ona od poprzedniej literą K, występującą po drugim ukośniku wyra enia re-
              gularnego. Dzięki temu przy porównywaniu du e i małe litery traktowane są tak samo,
              czyli słowa 6#- i VCM są równowa ne.

Ćwiczenie 7.5.

              Sprawdź, czy w zmiennej adres występuje cyfra 2.

              Rozwiązanie
                  WUTDKPRGTN
                 CFTGU  $CLMQYC  O  

               KH
 CFTGU `  ]
                 RTKPV ,GUV FYCP 
               _

              Wartości liczbowe w języku Perl traktowane są tak samo jak znaki, dlatego w wyra eniach
              regularnych mo emy u ywać równie cyfr, w taki sam sposób jak liter.
72                                                                                     Perl. Ćwiczenia



Ćwiczenie 7.6.

            Ustal, czy w adresie występuje ukośnik.

            Rozwiązanie
                   WUTDKPRGTN
                  CFTGU  $CLMQYC  

                 KH
 CFTGU `  ]
                   RTKPV /KGUMCPKG Y DNQMWP 
                 _

            Wyra enia regularne umieszczamy w ukośnikach (). Jeśli chcemy umieścić ukośnik
            w tak zapisanym wyra eniu regularnym, musimy go poprzedzić odwrotnym ukośnikiem ().
            W ten sposób zapis () staje się dość nieczytelny. Mo emy jednak zmienić sposób
            zapisu wyra enia, zmieniając znaki ograniczające to wyra enie () na dowolne inne (z wy-
            jątkiem liter i cyfr), np. na kreskę pionową (^).
                   WUTDKPRGTN
                  CFTGU  $CLMQYC  

                 KH
 CFTGU ` O^^ ]
                   RTKPV /KGUMCPKG Y DNQMWP 
                 _

            Warunkiem zmiany ograniczającego ukośnika na inny znak jest umieszczenie przed wyra e-
            niem litery O. Czasem mo na te spotkać zapis wyra enia regularnego z ukośnikami i literą O
            (O). Nie jest on błędny, lecz — jak widać w poprzednich ćwiczeniach — nadmiarowy.

Ćwiczenie 7.7.

            Sprawdź, czy numer domu lub mieszkania jest równy .

            Rozwiązanie
                  WUTDKPRGTN
                 CFTGU  $CLMQYC  O  

                 KH
 CFTGU `    ]
                   RTKPV ,GUV FYCP 
                 _

            Za zadanie mamy sprawdzić, czy w zmiennej zawierającej adres występuje liczba . Spo-
            dziewamy się, e mogą wystąpić tu dwie liczby, z których przynajmniej jedna jest równa
            dwa. Nie mo na jako wyra enia regularnego w tym przypadku u yć , gdy moglibyśmy
            wówczas jako dwa potraktować liczbę, której jedną z cyfr jest dwa (np. ). Zastosujemy
            zatem sprawdzanie, czy w zmiennej QFR znajduje się fraza składająca się z dwóch spacji,
            pomiędzy którymi występuje cyfra .

            Przedstawione rozwiązanie nie jest jednak tym, które spełnia warunki zadania. Poprawny
            zapis wyra enia regularnego znajduje się poni ej.
Rozdział 7.    Wyra enia regularne                                                                        73


                  WUTDKPRGTN
                 CFTGU  $CLMQYC  

               KH
 CFTGU ` DD ]
                 RTKPV ,GUV FYCP 
               _

              Widzimy tu, e niekoniecznie przed oraz za liczbą dwa musi wystąpić spacja. W tej sytuacji
              zamiast spacji nale y zastosować ograniczenie słowa (D). Jest to analogiczna konstrukcja,
              jak w przypadku początku i końca frazy (@ ).

Ćwiczenie 7.8.

              Zbadaj, czy któryś z numerów w adresie jest parzysty.

              Rozwiązanie
                  WUTDKPRGTN
                 CFTGU  $CLMQYC  

               KH
 CFTGU ` =?D ]
                 RTKPV ,GUV RCT[UVCP 
               _

              Liczba parzysta to taka, która kończy się cyfrą parzystą, czyli jedną ze zbioru: 0, 2, 4, 6, 8.
              Rozwiązanie jest bardzo podobne do poprzedniego, z tą ró nicą, e mamy odpowiedzieć
              na pytanie o ostatnią cyfrę. Dlatego występuje tu tylko jedno ograniczenie końca wyrazu D.

              Zamiast sprawdzania, czy wystąpiła tylko jedna cyfra, sprawdzamy, czy nie wystąpił jeden
              z pięciu wymienionych znaków (w tym przypadku cyfr). Robimy to przy u yciu oznaczenia
              klasy znaków w języku Perl, u ywając nawiasów kwadratowych =?.

Ćwiczenie 7.9.

              Prześledź, czy w adresie nie występuje liczba nieparzysta.

              Rozwiązanie
                  WUTDKPRGTN
                 CFTGU  $CLMQYC  

               KH
 CFTGU ` =?D ]
                 RTKPV $TCM PKGRCT[UVGLP 
               _

              Analogicznie jak poprzednio, musimy za pomocą D ustalić, jaki jest ostatni znak wyrazu
              i czy nie jest on nieparzysty.

Ćwiczenie 7.10.

              Jeśli w adresie jest liczba parzysta, znajdź ją.
74                                                                                      Perl. Ćwiczenia


            Rozwiązanie
                   WUTDKPRGTN
                  CFTGU  $CLMQYC  

              KH
 CFTGU ` F
=?D ]
                RTKPV ,GUV RCT[UVC P 
              _

            W poprzednim ćwiczeniu u ywaliśmy wyra enia =?D. Teraz dodaliśmy F
, a tak e
            ujęliśmy wszystko w nawiasy.

            Kombinacja F oznacza wystąpienie dowolnej cyfry i jest równoznaczna z zapisem
            =?, który w skrócie wygląda następująco — =?.

            Gwiazdka (
) w wyra eniach regularnych oznacza, e poprzedzające ją wyra enie nie
            musi wcale wystąpić lub mo e się pojawić wielokrotnie (czyli 0 lub więcej razy). W naszym
            przypadku przed ostatnią cyfrą parzystą mo e pojawić się w liczbie wiele innych cyfr, co
            nie będzie miało znaczenia dla parzystości szukanej liczby.

            Jeśli w adresie jest liczba parzysta, jej wartość znajdzie się w zmiennej , którą następnie
            wyświetlamy. Ciąg znaków poprzedzający dopasowanie znajdzie się w B, zaś wystę-
            pujący po — w zmiennej . Interpreter zawsze znajduje w takiej sytuacji tylko pierwsze
            miejsce, w którym spełniony jest zadany warunek.

Ćwiczenie 7.11.

            Znajdź obie lub jedną liczbę parzystą w adresie.

            Rozwiązanie
                   WUTDKPRGTN
                  CFTGU  $CLMQYC  

              KH
 CFTGU ` 
F
=?D
F
=?D! ]
                RTKPV ,GUV RCT[UVC  P 
              _

            Wyra enie regularne ma tu postać podobną jak poprzednio, lecz powtórzone zostały dwu-
            krotnie sekwencje F
=?D. Obie ujęto w nawiasy, a po drugiej dodano znak zapyta-
            nia. Dzięki niemu ta druga sekwencja oznaczająca liczbę parzystą mo e, lecz nie musi, wy-
            stąpić, co pozwala nam znaleźć jedną lub obie liczby parzyste, w zale ności od tego, ile
            ich wystąpiło.

            Pomiędzy liczbami powinny znaleźć się jakieś znaki nie będące cyframi (symbol ), o ile
            w adresie są dwie liczby.

            Zastosowanie nawiasów w wyra eniu regularnym spowoduje, e w przypadku, gdy spraw-
            dzanie ciągu się powiedzie (u nas — gdy w adresie wystąpi co najmniej jedna liczba pa-
            rzysta), po sprawdzeniu ustawione zostaną zmienne, których nazwy są liczbami. Kolejne
            zmienne odpowiadają kolejności u ytych nawiasów. Efektem działania programu będzie
            napis:
              ,GUV RCT[UVC
Rozdział 7.    Wyra enia regularne                                                                75


              Wartości zmiennych o nazwach liczbowych są kasowane przed u yciem kolejnego wy-
              ra enia regularnego, dlatego nale y ich wartości zachowywać w innych zmiennych, na
              przykład za pomocą następującego zapisu:
                 WUTDKPRGTN
                CFTGU  $CLMQYC  

                CFTGU ` 
F
=?D

More Related Content

PDF
Asembler. Sztuka programowania
PDF
Java. Rozmówki
PDF
Praktyczny kurs asemblera
PDF
Perl. Od podstaw
PDF
Programowanie w języku C. FAQ
PDF
Uczta programistów
PDF
Java 2. Podstawy
PDF
ActionScript. Receptury
Asembler. Sztuka programowania
Java. Rozmówki
Praktyczny kurs asemblera
Perl. Od podstaw
Programowanie w języku C. FAQ
Uczta programistów
Java 2. Podstawy
ActionScript. Receptury

What's hot (20)

PDF
Asembler dla procesorów Intel. Vademecum profesjonalisty
PDF
Efektywne programowanie w języku Java
PDF
Po prostu PHP. Techniki zaawansowane
PDF
Delphi. Szybki start
PDF
Linux. Niezbędnik programisty
PDF
Nero 6. Nagrywanie płyt CD i DVD. Ćwiczenia praktyczne
PDF
Java. Techniki zaawansowane. Wydanie VIII
PDF
Pajączek 5 NxG. Ćwiczenia praktyczne
PDF
Programowanie w języku C. Szybki start
PDF
Python. Rozmówki
PDF
C#. Ćwiczenia
PDF
TCP/IP dla każdego
PDF
PHP5. Praktyczny kurs
PDF
Znajdź błąd. Sztuka analizowania kodu
PDF
The Shellcoders Handbook. Edycja polska
PDF
Po prostu własny serwer internetowy
PDF
C. Leksykon kieszonkowy
PDF
Angielski z komputerem. Programy, słowniki komputerowe i strony WWW
PDF
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
PDF
ABC Delphi 7
Asembler dla procesorów Intel. Vademecum profesjonalisty
Efektywne programowanie w języku Java
Po prostu PHP. Techniki zaawansowane
Delphi. Szybki start
Linux. Niezbędnik programisty
Nero 6. Nagrywanie płyt CD i DVD. Ćwiczenia praktyczne
Java. Techniki zaawansowane. Wydanie VIII
Pajączek 5 NxG. Ćwiczenia praktyczne
Programowanie w języku C. Szybki start
Python. Rozmówki
C#. Ćwiczenia
TCP/IP dla każdego
PHP5. Praktyczny kurs
Znajdź błąd. Sztuka analizowania kodu
The Shellcoders Handbook. Edycja polska
Po prostu własny serwer internetowy
C. Leksykon kieszonkowy
Angielski z komputerem. Programy, słowniki komputerowe i strony WWW
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
ABC Delphi 7
Ad

Viewers also liked (14)

PDF
PDF
SQL. Szybki start
PDF
Po prostu HTML 4. Wydanie III
PDF
Windows XP. Indywidualne szkolenie
PDF
Dreamweaver MX
PDF
Po prostu Outlook 2000 PL. Zarządzanie czasem
PDF
Java 2. Techniki zaawansowane
PDF
Sieci komputerowe. Kompendium
PDF
Po prostu Flash MX
PDF
PHP 5 i MySQL. Zastosowania e-commerce
PDF
J2EE. Wzorce projektowe
PDF
Java 2. Techniki zaawansowane. Wydanie II
PDF
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
PDF
Sekrety kryptografii
SQL. Szybki start
Po prostu HTML 4. Wydanie III
Windows XP. Indywidualne szkolenie
Dreamweaver MX
Po prostu Outlook 2000 PL. Zarządzanie czasem
Java 2. Techniki zaawansowane
Sieci komputerowe. Kompendium
Po prostu Flash MX
PHP 5 i MySQL. Zastosowania e-commerce
J2EE. Wzorce projektowe
Java 2. Techniki zaawansowane. Wydanie II
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
Sekrety kryptografii
Ad

Similar to Perl. Ćwiczenia (20)

PDF
Perl. Zaawansowane programowanie
PDF
Algorytmy w Perlu
PDF
Java. Kompendium programisty
PDF
Perl. Receptury. Wydanie II
PDF
JavaScript. Projekty
PDF
PHP. Programowanie
PDF
Po prostu Java 2
PDF
Prolog. Programowanie
PDF
Perl. Zaawansowane programowanie. Wydanie II
PDF
Perl 6. Podstawy
PDF
Delphi 7 dla każdego
PDF
PHP5. Obiekty, wzorce, narzędzia
PDF
Perl. Testowanie. Zapiski programisty
PDF
mod_perl. Podręcznik programisty
PDF
PHP. Rozmówki
PDF
Po prostu Word 2003 PL
PDF
Po prostu Pajączek 5 NxG
PDF
Delphi 2007 dla WIN32 i bazy danych
PDF
Flash i PHP5. Podstawy
Perl. Zaawansowane programowanie
Algorytmy w Perlu
Java. Kompendium programisty
Perl. Receptury. Wydanie II
JavaScript. Projekty
PHP. Programowanie
Po prostu Java 2
Prolog. Programowanie
Perl. Zaawansowane programowanie. Wydanie II
Perl 6. Podstawy
Delphi 7 dla każdego
PHP5. Obiekty, wzorce, narzędzia
Perl. Testowanie. Zapiski programisty
mod_perl. Podręcznik programisty
PHP. Rozmówki
Po prostu Word 2003 PL
Po prostu Pajączek 5 NxG
Delphi 2007 dla WIN32 i bazy danych
Flash i PHP5. Podstawy

More from Wydawnictwo Helion (20)

PDF
Tworzenie filmów w Windows XP. Projekty
PDF
Blog, więcej niż internetowy pamiętnik
PDF
Access w biurze i nie tylko
PDF
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
PDF
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
PDF
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
PDF
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
PDF
Makrofotografia. Magia szczegółu
PDF
Windows PowerShell. Podstawy
PDF
Java. Efektywne programowanie. Wydanie II
PDF
JavaScript. Pierwsze starcie
PDF
Ajax, JavaScript i PHP. Intensywny trening
PDF
PowerPoint 2007 PL. Seria praktyk
PDF
Excel 2007 PL. Seria praktyk
PDF
Access 2007 PL. Seria praktyk
PDF
Word 2007 PL. Seria praktyk
PDF
Serwisy społecznościowe. Budowa, administracja i moderacja
PDF
AutoCAD 2008 i 2008 PL
PDF
Bazy danych. Pierwsze starcie
PDF
Inventor. Pierwsze kroki
Tworzenie filmów w Windows XP. Projekty
Blog, więcej niż internetowy pamiętnik
Access w biurze i nie tylko
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Makrofotografia. Magia szczegółu
Windows PowerShell. Podstawy
Java. Efektywne programowanie. Wydanie II
JavaScript. Pierwsze starcie
Ajax, JavaScript i PHP. Intensywny trening
PowerPoint 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
Serwisy społecznościowe. Budowa, administracja i moderacja
AutoCAD 2008 i 2008 PL
Bazy danych. Pierwsze starcie
Inventor. Pierwsze kroki

Perl. Ćwiczenia

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Perl. Æwiczenia praktyczne KATALOG KSI¥¯EK Autor: Krzysztof Juszkiewicz KATALOG ONLINE ISBN: 83-7197-946-0 Format: B5, stron: 132 ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA Je li chcesz rozpocz¹æ przygodê z programowaniem — zacznij naukê od Perla. Po kilku godzinach pracy przekonasz siê, ¿e dokona³e najlepszego wyboru. Perl posiada wielk¹ zaletê, której brakuje konkurencyjnym narzêdziom: nie znaj¹c wszystkich jego CENNIK I INFORMACJE niuansów mo¿esz pisaæ dzia³aj¹ce aplikacje. Larry Wall stworzy³ Perla dla osób, które s¹ niecierpliwe (programy w Perlu pisze siê ZAMÓW INFORMACJE bardzo szybko), leniwe (kod programów jest zwiêz³y, a ich tworzenie u³atwia ogromna O NOWO CIACH liczba gotowych modu³ów) i chc¹ byæ dumne z tego, co robi¹ (sam przekonasz siê, jak wiele satysfakcji dostarczy Ci programowanie w Perlu). ZAMÓW CENNIK Ksi¹¿ka przeznaczona jest dla pocz¹tkuj¹cych programistów. Dowiesz siê z niej jak zainstalowaæ Perla, a nastêpnie, krok po kroku, æwiczenie po æwiczeniu, zag³êbisz siê w jego wiat. CZYTELNIA Poznasz: FRAGMENTY KSI¥¯EK ONLINE • Fundamenty jêzyka: zmienne, instrukcje i referencje • Wyra¿enia regularne, umo¿liwiaj¹ce szybkie przeszukiwanie tekstów i podmianê fragmentów • Sposoby korzystania z plików • Zasady pisania skryptów CGI • Wysy³anie e-maili za pomoc¹ Perla • £¹czenie Perla z bazami danych Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Wstęp.............................................................................................................................................................. 5 Rozdział 1. Instalacja ...................................................................................................................................................... 7 Archiwum języka Perl — CPAN .................................................................................................8 ActivePerl...................................................................................................................................11 Uruchamianie skryptów .............................................................................................................16 Błędy podczas uruchamiania skryptów ...............................................................................18 Polskie znaki ..............................................................................................................................22 Rozdział 2. Zmienne.......................................................................................................................................................25 Zmienne skalarne .......................................................................................................................25 Tablice ........................................................................................................................................30 Tablice asocjacyjne ....................................................................................................................36 Rozdział 3. Instrukcje warunkowe i pętle.......................................................................................................... 41 Rozdział 4. Funkcje ........................................................................................................................................................ 47 Rozdział 5. Referencje ................................................................................................................................................ 53 Referencje skalarne ....................................................................................................................53 Referencje tablicowe ..................................................................................................................55 Referencje asocjacyjne ...............................................................................................................57 Zmienne wielowymiarowe .........................................................................................................58 Rozdział 6. Debugger ................................................................................................................................................... 63 Wykonywanie krokowe..............................................................................................................64 Czujki .........................................................................................................................................66 Wartości zmiennych ...................................................................................................................66 Rozdział 7. Wyra enia regularne........................................................................................................................... 69 Sprawdzanie ...............................................................................................................................69 Zamiana ......................................................................................................................................78 Dzielenie.....................................................................................................................................80 Transliteracja ..............................................................................................................................81
  • 3. 4 Perl. Ćwiczenia Rozdział 8. Obsługa plików....................................................................................................................................... 85 Sprawdzanie i zmiana atrybutów ...............................................................................................85 Odczyt i zapis .............................................................................................................................91 Ograniczanie dostępu .................................................................................................................96 Pliki binarne ...............................................................................................................................98 Rozdział 9. WWW........................................................................................................................................................... 101 Moduł CGI ...............................................................................................................................102 Rozdział 10. Poczta elektroniczna .......................................................................................................................... 113 Rozdział 11. Inne usługi sieciowe.......................................................................................................................... 121 Rozdział 12. Bazy danych............................................................................................................................................. 127
  • 4. 7. Rozdział Wyra enia regularne Język Perl jest dobrze przystosowany do przetwarzania tekstów. Jego główną zaletą wią ącą się z tym zagadnieniem są wyra enia regularne. Ich istotą jest tworzenie wzorców opartych o ró ne symbole. Taki wzorzec jest dopasowywany do testowanego tekstu i w ten sposób mo na sprawdzać, czy dany tekst zawiera określone litery, znaki, grupy liter, słowa. Opie- rając się na wykonanym dopasowaniu (lub jego braku) mo na dodatkowo podmienić pa- sującą frazę na inną. Sprawdzanie Ćwiczenie 7.1. Sprawdź, czy w zmiennej region znajduje się słowo karp. Rozwiązanie WUTDKPRGTN TGIKQP RQFMCTRCEMK KH TGIKQP ` MCTR ] RTKPV ,GUV MCTRP _ Wartość zmiennej TGIKQP ustawiamy na RQFMCTRCEMK. W tym słowie znajduje się fraza MCTR, więc efekt sprawdzenia będzie pozytywny i na ekranie powinniśmy zobaczyć napis wygenerowany przez funkcję RTKPV. Do obsługi wyra eń regularnych u ywamy operatora składającego się ze znaku równości i tyldy (`). W niektórych edytorach mogą wystąpić problemy z wpisaniem znaku tyldy (`), gdy po naciśnięciu odpowiedniego klawisza nie pojawia się on na ekranie. Nale y wówczas oprócz właściwego klawisza u yć spacji.
  • 5. 70 Perl. Ćwiczenia Po operatorze wyra enia regularnego piszemy samo wyra enie ujęte w ukośniki (). Wpisa- nie ciągu liter (tak jak w tym przypadku) spowoduje sprawdzenie, czy w danej zmiennej zawierającej ciąg znaków (RQFMCTRCEMK) występuje zadany podciąg (MCTR). Ćwiczenie 7.2. Zbadaj, czy w zmiennej region nie ma słowa karp. Rozwiązanie WUTDKPRGTN KH TGIKQP ` MCTR ] RTKPV $TCM MCTRP _ KH TGIKQP ` MCTR ] RTKPV $TCM MCTRP _ WPNGUU TGIKQP ` MCTR ] RTKPV $TCM MCTRP _ W tym przypadku przedstawiono trzy alternatywne rozwiązania. Są one równowa ne. W pierwszym wierszu widzimy, e zastosowano operator `. Sprawdzamy zatem, czy gdziekolwiek w zmiennej TGIKQP nie ma układu liter MCTR. Ten sam efekt uzyskamy sto- sując wykrzyknik przed warunkiem (warunek drugi) oraz dzięki u yciu warunku nega- tywnego WPNGUU (jeśli nie). Ćwiczenie 7.3. Prześledź, czy słowo karp znajduje się w zmiennej domyślnej. Rozwiązanie WUTDKPRGTN A RQFMCTRCEMK KH MCTR ] RTKPV ,GUV MCTRP _ Zmienna domyślna to taka, której nazwa składa się jedynie z podkreślenia (A). Jeśli w takiej zmiennej umieścimy nasz tekst do sprawdzenia (RQFMCTRCEMK), nie trzeba stosować ope- ratora wyra enia regularnego (`), wystarczy jedynie samo wyra enie w ukośnikach. Ćwiczenie 7.4. Przeanalizuj, czy odpowiedź zawarta w zmiennej odp jest twierdząca.
  • 6. Rozdział 7. Wyra enia regularne 71 Rozwiązanie WUTDKPRGTN KH QFR ` VCM ] RTKPV ,GUV 1-P _ Sprawdzamy tutaj za pomocą wyra enia regularnego, czy odpowiedź zawiera słowo VCM. Nie mo emy mieć jednak pewności, czy odpowiedzią (wartość zmiennej QFR) nie była na przykład VCMV[MC lub VCMPKG. Powinniśmy zatem zastosować jeden z poni szych wierszy. WUTDKPRGTN KH QFR GS VCM ] RTKPV ,GUV 1-P _ KH QFR ` @VCM ] RTKPV ,GUV 1-P _ W pierwszym wierszu widzimy porównanie (GS) wartości zmiennej QFR i ciągu znaków VCM, natomiast w drugim warunku mamy do czynienia z adekwatnym wyra eniem regularnym. Zastosowanie daszka (@) i dolara ( ) oznacza w tym przypadku odpowiednio początek i koniec ciągu znaków. Innymi słowy, chcemy by słowo tak było dokładnie tym, co znajduje się w zmiennej QFR. Właśnie po to stosujemy znaki daszka i dolara. Istnieje jednak nadal mo liwość, e odpowiedź była twierdząca, a my tego nie stwierdzimy. Stanie się tak, gdy zmienna QFR będzie miała przykładowo wartość 6#- lub 6CM. Zaradzimy takiemu zjawisku u ywając innej konstrukcji. WUTDKPRGTN KH QFR ` @VCM K ] RTKPV ,GUV 1-P _ Ró ni się ona od poprzedniej literą K, występującą po drugim ukośniku wyra enia re- gularnego. Dzięki temu przy porównywaniu du e i małe litery traktowane są tak samo, czyli słowa 6#- i VCM są równowa ne. Ćwiczenie 7.5. Sprawdź, czy w zmiennej adres występuje cyfra 2. Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC O KH CFTGU ` ] RTKPV ,GUV FYCP _ Wartości liczbowe w języku Perl traktowane są tak samo jak znaki, dlatego w wyra eniach regularnych mo emy u ywać równie cyfr, w taki sam sposób jak liter.
  • 7. 72 Perl. Ćwiczenia Ćwiczenie 7.6. Ustal, czy w adresie występuje ukośnik. Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC KH CFTGU ` ] RTKPV /KGUMCPKG Y DNQMWP _ Wyra enia regularne umieszczamy w ukośnikach (). Jeśli chcemy umieścić ukośnik w tak zapisanym wyra eniu regularnym, musimy go poprzedzić odwrotnym ukośnikiem (). W ten sposób zapis () staje się dość nieczytelny. Mo emy jednak zmienić sposób zapisu wyra enia, zmieniając znaki ograniczające to wyra enie () na dowolne inne (z wy- jątkiem liter i cyfr), np. na kreskę pionową (^). WUTDKPRGTN CFTGU $CLMQYC KH CFTGU ` O^^ ] RTKPV /KGUMCPKG Y DNQMWP _ Warunkiem zmiany ograniczającego ukośnika na inny znak jest umieszczenie przed wyra e- niem litery O. Czasem mo na te spotkać zapis wyra enia regularnego z ukośnikami i literą O (O). Nie jest on błędny, lecz — jak widać w poprzednich ćwiczeniach — nadmiarowy. Ćwiczenie 7.7. Sprawdź, czy numer domu lub mieszkania jest równy . Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC O KH CFTGU ` ] RTKPV ,GUV FYCP _ Za zadanie mamy sprawdzić, czy w zmiennej zawierającej adres występuje liczba . Spo- dziewamy się, e mogą wystąpić tu dwie liczby, z których przynajmniej jedna jest równa dwa. Nie mo na jako wyra enia regularnego w tym przypadku u yć , gdy moglibyśmy wówczas jako dwa potraktować liczbę, której jedną z cyfr jest dwa (np. ). Zastosujemy zatem sprawdzanie, czy w zmiennej QFR znajduje się fraza składająca się z dwóch spacji, pomiędzy którymi występuje cyfra . Przedstawione rozwiązanie nie jest jednak tym, które spełnia warunki zadania. Poprawny zapis wyra enia regularnego znajduje się poni ej.
  • 8. Rozdział 7. Wyra enia regularne 73 WUTDKPRGTN CFTGU $CLMQYC KH CFTGU ` DD ] RTKPV ,GUV FYCP _ Widzimy tu, e niekoniecznie przed oraz za liczbą dwa musi wystąpić spacja. W tej sytuacji zamiast spacji nale y zastosować ograniczenie słowa (D). Jest to analogiczna konstrukcja, jak w przypadku początku i końca frazy (@ ). Ćwiczenie 7.8. Zbadaj, czy któryś z numerów w adresie jest parzysty. Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC KH CFTGU ` =?D ] RTKPV ,GUV RCT[UVCP _ Liczba parzysta to taka, która kończy się cyfrą parzystą, czyli jedną ze zbioru: 0, 2, 4, 6, 8. Rozwiązanie jest bardzo podobne do poprzedniego, z tą ró nicą, e mamy odpowiedzieć na pytanie o ostatnią cyfrę. Dlatego występuje tu tylko jedno ograniczenie końca wyrazu D. Zamiast sprawdzania, czy wystąpiła tylko jedna cyfra, sprawdzamy, czy nie wystąpił jeden z pięciu wymienionych znaków (w tym przypadku cyfr). Robimy to przy u yciu oznaczenia klasy znaków w języku Perl, u ywając nawiasów kwadratowych =?. Ćwiczenie 7.9. Prześledź, czy w adresie nie występuje liczba nieparzysta. Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC KH CFTGU ` =?D ] RTKPV $TCM PKGRCT[UVGLP _ Analogicznie jak poprzednio, musimy za pomocą D ustalić, jaki jest ostatni znak wyrazu i czy nie jest on nieparzysty. Ćwiczenie 7.10. Jeśli w adresie jest liczba parzysta, znajdź ją.
  • 9. 74 Perl. Ćwiczenia Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC KH CFTGU ` F
  • 10. =?D ] RTKPV ,GUV RCT[UVC P _ W poprzednim ćwiczeniu u ywaliśmy wyra enia =?D. Teraz dodaliśmy F
  • 11. , a tak e ujęliśmy wszystko w nawiasy. Kombinacja F oznacza wystąpienie dowolnej cyfry i jest równoznaczna z zapisem =?, który w skrócie wygląda następująco — =?. Gwiazdka (
  • 12. ) w wyra eniach regularnych oznacza, e poprzedzające ją wyra enie nie musi wcale wystąpić lub mo e się pojawić wielokrotnie (czyli 0 lub więcej razy). W naszym przypadku przed ostatnią cyfrą parzystą mo e pojawić się w liczbie wiele innych cyfr, co nie będzie miało znaczenia dla parzystości szukanej liczby. Jeśli w adresie jest liczba parzysta, jej wartość znajdzie się w zmiennej , którą następnie wyświetlamy. Ciąg znaków poprzedzający dopasowanie znajdzie się w B, zaś wystę- pujący po — w zmiennej . Interpreter zawsze znajduje w takiej sytuacji tylko pierwsze miejsce, w którym spełniony jest zadany warunek. Ćwiczenie 7.11. Znajdź obie lub jedną liczbę parzystą w adresie. Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC KH CFTGU ` F
  • 13. =?D
  • 14. F
  • 15. =?D! ] RTKPV ,GUV RCT[UVC P _ Wyra enie regularne ma tu postać podobną jak poprzednio, lecz powtórzone zostały dwu- krotnie sekwencje F
  • 16. =?D. Obie ujęto w nawiasy, a po drugiej dodano znak zapyta- nia. Dzięki niemu ta druga sekwencja oznaczająca liczbę parzystą mo e, lecz nie musi, wy- stąpić, co pozwala nam znaleźć jedną lub obie liczby parzyste, w zale ności od tego, ile ich wystąpiło. Pomiędzy liczbami powinny znaleźć się jakieś znaki nie będące cyframi (symbol ), o ile w adresie są dwie liczby. Zastosowanie nawiasów w wyra eniu regularnym spowoduje, e w przypadku, gdy spraw- dzanie ciągu się powiedzie (u nas — gdy w adresie wystąpi co najmniej jedna liczba pa- rzysta), po sprawdzeniu ustawione zostaną zmienne, których nazwy są liczbami. Kolejne zmienne odpowiadają kolejności u ytych nawiasów. Efektem działania programu będzie napis: ,GUV RCT[UVC
  • 17. Rozdział 7. Wyra enia regularne 75 Wartości zmiennych o nazwach liczbowych są kasowane przed u yciem kolejnego wy- ra enia regularnego, dlatego nale y ich wartości zachowywać w innych zmiennych, na przykład za pomocą następującego zapisu: WUTDKPRGTN CFTGU $CLMQYC CFTGU ` F
  • 18. =?D
  • 19. F
  • 20. =?D! RCT[UVG Mo na tak e zastosować konstrukcję, która wynik umieści wprost w tablicy: WUTDKPRGTN CFTGU $CLMQYC RCT[UVG CFTGU ` F
  • 21. =?D
  • 22. F
  • 23. =?D! Ćwiczenie 7.12. Wyświetl kolejno wszystkie liczby parzyste w adresie. Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC YJKNG CFTGU ` F
  • 24. =?DI ] RTKPV P _ Wartość zmiennej CFTGU jest dopasowywana do znanego nam ju wzorca F
  • 25. =?. Tym razem jednak po wyra eniu regularnym pojawiła się litera I, oznaczająca konieczność przeszukania całego ciągu, nie zaś — jak poprzednio — tylko pierwszego miejsca, które pasuje do wzorca. Na ekranie zobaczymy następujące linie wygenerowane przez program: Ćwiczenie 7.13. Poka wszystkie liczby znajdujące się na początku kolejnych wierszy. Rozwiązanie WUTDKPRGTN YKGTUG P PP YJKNG YKGTUG ` @ F IO ] RTKPV P _ W zmiennej YKGTUG umieszczono cztery liczby w trzech wierszach (trzy znaki nowej linii). Wyra enie @ F będzie pasować jedynie do jednej liczby znajdującej się na po- czątku zmiennej, nawet w przypadku zastosowania modyfikatora I, u ytego w poprzednim
  • 26. 76 Perl. Ćwiczenia ćwiczeniu. Dzieje się tak, poniewa znaki @ i oznaczają końce wartości całej zmiennej. Dodanie modyfikatora O spowoduje, e wspomniane znaki odnosić się będą do podziału wyznaczonego przez końce linii. Wydruk na ekranie będzie się przedstawiał następująco: Ćwiczenie 7.14. Znajdź czwarty znak w zmiennej adres. Rozwiązanie WUTDKPRGTN CFTGU $CLMQYC PCM CFTGU ` ]_ RTKPV PCM W wyra eniu regularnym widzimy kropkę, która zastępuje dowolny znak. Po niej w na- wiasach klamrowych jest liczba , oznaczająca, e poprzedzający ją znak musi wystąpić dokładnie trzy razy. Następnie znowu jest kropka, w zwykłych nawiasach. Dzięki temu po dopasowaniu do wyra enia regularnego ustawiona zostanie zmienna o wartości rów- nej czwartemu znakowi. Ponadto ten znak zostanie zwrócony i podstawiony do zmien- nej PCM, a na ekranie zobaczymy literę M. Zastosowanie wyra enia regularnego do tego typu problemu nie jest najlepszym rozwiąza- niem. Lepiej u yć funkcji UWDUVT. WUTDKPRGTN CFTGU $CLMQYC PCM UWDUVT CFTGU Ćwiczenie 7.15. Znajdź wszystkie cyfry znajdujące się w zmiennej liczba przed cyfrą 0. Rozwiązanie WUTDKPRGTN NKEDC RTKPV NKEDC ` F
  • 27. W zmiennej NKEDC cyfra zero występuje dwukrotnie. Stosując wzorzec F
  • 28. otrzymujemy największe mo liwe dopasowanie, czyli zawierające pierwsze zero. Efektem działania funkcji RTKPV będzie liczba . Gdy chcemy otrzymać najmniejsze dopasowanie, nale y po gwiazdce dodać znak zapytania. W naszym przypadku, jeśli chcemy otrzymać liczbę , wzorzec powinien mieć postać F
  • 29. !.
  • 30. Rozdział 7. Wyra enia regularne 77 Ten sam rezultat mo na uzyskać dzięki wyra eniu =?
  • 31. . Oznacza ono zero lub wielokrotne (
  • 32. ) wystąpienie cyfr od do . Ćwiczenie 7.16. Sprawdź, czy w zmiennej region jest ciąg liter umieszczony w zmiennej fragment. Rozwiązanie WUTDKPRGTN TGIKQP RQFMCTRCEMK HTCIOGPV MCTR KH TGIKQP ` HTCIOGPV ] RTKPV ,GUV EKæI HTCIOGPVP _ W pierwszych dwóch wierszach ustawiamy wartości zmiennych TGIKQP i HTCIOGPV odpo- wiednio na RQFMCTRCEMK oraz MCTR. Na początku tego rozdziału zastosowaliśmy warunek TGIKQP ` MCTR. Teraz zamiast słowa MCTR stosujemy wartość zmiennej HTCIOGPV, która go zawiera. Takie zastosowanie wyra enia regularnego jest dość wygodne, lecz mo e wydłu yć czas wykonywania skryptu, gdy przed ka dym dopasowaniem wyra enia regularnego (na przykład w pętli) interpreter musi sprawdzić, czy wartość zmiennej HTCIOGPV nie uległa zmianie. Wiedząc, e wartość zmiennej nie ulega zmianie, programista mo e wyłączyć sprawdzanie dodając literę o po wyra eniu regularnym, tak by ostatni wiersz miał nastę- pującą postać: WUTDKPRGTN KH TGIKQP ` HTCIOGPVQ ] RTKPV ,GUV EKæI HTCIOGPVP _ Ćwiczenie 7.17. Do zmiennej fragment wstaw nawias i sprawdź, czy występuje on w zmiennej region. Rozwiązanie WUTDKPRGTN TGIKQP RQFMCTRCEMK HTCIOGPV KH TGIKQP ` HTCIOGPVQ ] RTKPV ,GUV EKæI HTCIOGPVP _ Nawias w wyra eniu regularnym ma znaczenie grupujące, dlatego nale y go poprzedzić odwrotnym ukośnikiem. Jego pominięcie spowoduje błąd, wyglądający jak poni ej: WPOCVEJGF KP TGIGZR
  • 33. 78 Perl. Ćwiczenia U ycie odwrotnego ukośnika jest nieeleganckie, gdy funkcja RTKPV da na ekranie mylący efekt. ,GUV EKæI Innym sposobem jest wyłączenie znaczenia znaków specjalnych w wyra eniu regularnym. Po modyfikacji rozwiązanie będzie miało następującą postać: WUTDKPRGTN TGIKQP RQFMCTRCEMK HTCIOGPV KH TGIKQP ` 3 HTCIOGPV'Q ] RTKPV ,GUV EKæI HTCIOGPVP _ Wspomniane wyłączenie będzie miało miejsce od znaków 3 do znaków '. Mo na te sekwencje stosować wielokrotnie. Zamiana Ćwiczenie 7.18. Zamień w zmiennej wladca słowo Kazimierz na Stefan. Rozwiązanie WUTDKPRGTN YNCFEC -CKOKGT $CVQT[ YNCFEC ` U-CKOKGT5VGHCP Za pomocą wyra eń regularnych mo emy nie tylko sprawdzić, czy dane wyra enie wy- stępuje, lecz równie dopasowane wyra enie zastąpić innym. Słu y do tego operator U, analogiczny do operatora sprawdzania — O. W przypadku zamiany z wykorzystaniem wyra enia regularnego nale y podać dwa wzorce, jeden do dopasowania (u nas -CKOKGT), drugi do zamiany (5VGHCP). Po zamianie warto- ścią zmiennej YNCFEC będzie 5VGHCP $CVQT[. Ćwiczenie 7.19. Usuń ze zmiennej znaczki wszystkie białe znaki na początku i końcu jej wartości. Rozwiązanie WUTDKPRGTN PCEMK VGMUV VGUVQY[ PCEMK ` U@U PCEMK ` UU RTKPV PCEMK
  • 34. Rozdział 7. Wyra enia regularne 79 W pierwszym wierszu usuwamy białe znaki (U) występujące na początku (@) zmiennej PCEMK. Plus ( ) oznacza konieczność co najmniej jednokrotnego wystąpienia któregoś z białych znaków. Mo e to być spacja, tabulacja lub znak nowej linii. Analogicznie w drugim wierszu pozbywamy się znaków przed końcem ( ) wartości zmiennej. Białe znaki w środku tekstu pozostaną niezmienione, a na ekranie zobaczymy: VGMUV VGUVQY[ Istnieją równie dwa ró ne sposoby realizacji tego zadania, przy zastosowaniu zapisu jednolinijkowego. Są one jednak e wolniejsze w działaniu ni poprzednie rozwiązanie. WUTDKPRGTN PCEMK VGMUV VGUVQY[ PCEMK ` U@U
  • 35. !U
  • 36. W związku z tym, e nale y przyjąć, i białe znaki mogą wystąpić jedynie z jednej strony, nale y zamiast plusa ( ) u yć gwiazdki (
  • 37. ). W ten sposób dopuszczamy brak wystąpienia białego znaku. W pierwszej wersji korzystamy z zamiany pewnej ograniczonej liczby (
  • 38. !) dowolnych znaków () na te same znaki, ale bez otaczających białych znaków. Zamiana jest dokony- wana poprzez zastosowanie nawiasów i wykorzystanie wartości zmiennej tymczasowej ( ). WUTDKPRGTN PCEMK VGMUV VGUVQY[ PCEMK ` U@U
  • 39. ^U
  • 40. I Drugi sposób opiera się na zamianie białych znaków na nic. Dodatkowo sprawdzane jest, czy występują one na początku lub (^) na końcu zmiennej. Ćwiczenie 7.20. Zamień znaki końca linii sytemu uniksowego na znaki końca linii w systemie Windows. Rozwiązanie PCEMK ` UPTPIO Dla systemu uniksowego znak końca linii w języku Perl zapisujemy za pomocą wyra enia P, natomiast dla Windows są to dwa znaki — TP. Nale y pamiętać, e w tym przy- padku jeden znak zastępujemy dwoma, z których jeden to ten sam znak. Modyfikatory (litery na końcu) IO są konieczne w przypadku występowania w zmiennej PCEMK wielu znaków nowej linii. Ćwiczenie 7.21. Zamień numery miesięcy na ich nazwy. Rozwiązanie WUTDKPRGTN PCY[ UV[EPKC NWVGIQ OCTEC MYKGVPKC OCLC EGTYEC NKREC UKGTRPKC YTG PKC RC FKGTPKMC NKUVQRCFC ITWFPKC
  • 41. 80 Perl. Ćwiczenia VGMUV 2T[UGF 4QRQEæ RTCEú K RTCEQYC FQ P VGMUV ` U F PCY[= ? I RTKPV VGMUV Na początku tworzymy tablicę PCY[ z nazwami miesięcy w odpowiednim przypadku. Następnie do zmiennej VGMUV wstawiamy dwa zdania z trzema datami. Trzeci wiersz to właściwa zamiana. Szukamy wzorca rozpoczynającego się minusem (), następnie przynajmniej jedna cyfra (F ) i potem znowu minus. Celem zamiany jest odstęp (spacja), wartość pewnej zmiennej i znowu spacja. Po dopasowaniu do wzorca pod zmienną podstawione zostanie wyra enie pasujące do fragmentu wzorca w nawiasach. Będzie to liczba oznaczająca numer miesiąca. Poniewa pierwszy miesiąc w tablicy PCY[ ma numer zero, więc od zmiennej nale y od- jąć jeden ( ). Nazwa miesiąca pobrana z tablicy PCY[ ma właśnie taki numer i jest u ywana przy zamianie. Efekt podmiany mo na zobaczyć na ekranie. 2T[UGF UV[EPKC 4QRQEæ RTCEú OCTEC K RTCEQYC FQ NKUVQRCFC Dzielenie Ćwiczenie 7.22. Wstaw do tablicy slowa kolejne słowa z wyra enia zawartego w zmiennej tekst. Rozwiązanie WUTDKPRGTN VGMUV 6W PCLFWLG UKú RKúè U ÎY UNQYC URNKV U VGMUV RTKPV LQKP P UNQYC Wyra enia regularne mo na stosować tak e do konwersji zmiennej skalarnej na tablicę. Słu y do tego funkcja URNKV, której jako pierwszy argument podajemy wyra enie regu- larne, a jako drugi — zmienną, na której podział ma być dokonany. W tym przypadku poszczególne elementy tablicy UNQYC są oddzielone białymi znakami (zazwyczaj słowa oddzielamy spacjami). Pominięcie plusa, występującego w pierwszym wierszu, mo e spo- wodować, e niektóre elementy tablicy UNQYC będą puste. Stanie się tak, gdy obok siebie znajdą się co najmniej dwa białe znaki. Przeciwne działanie do funkcji URNKV ma funkcja LQKP. Dzięki tej drugiej mo emy tablicę połączyć w zmienną skalarną, wstawiając pomiędzy elementy podany ciąg znaków (nie wyra enie regularne). U nas będzie to znak nowej linii, czyli kolejne elementy tablicy UNQYC zobaczymy na ekranie w kolejnych wierszach. 6W PCLFWLG UKú RKúè U ÎY
  • 42. Rozdział 7. Wyra enia regularne 81 Ćwiczenie 7.23. Wstaw do tablicy litery kolejne znaki ze zmiennej tekst. Rozwiązanie WUTDKPRGTN VGMUV #$%ECD NKVGT[ URNKV VGMUV RTKPV LQKP NKVGT[ W przypadku, gdy u ywamy funkcji URNKV i podamy jej puste wyra enie regularne, w wy- nikowej tablicy (NKVGT[) otrzymamy kolejne znaki ze zmiennej VGMUV. Elementami tablicy będą wszystkie znaki, a nie jedynie litery. W naszym przypadku na ekranie zobaczymy je oddzielone przecinkami, dzięki funkcji LQKP. #$%ECD Transliteracja Ćwiczenie 7.24. Zamień wszystkie litery typowe dla języka polskiego na ich obce odpowiedniki. Rozwiązanie WUTDKPRGTN VGMUV Î MPæ NGF VGMUV ` VTæèú Î äçù ¦ CEGNPQU#%'.015 RTKPV VGMUV W Perlu istnieje operator transliteracji VT (zapisywany tak e jako [). Jego działanie polega na zamianie wszystkich znaków ze wzorca na odpowiadające im znaki ze wzorca zamiany. W naszym przypadku wszystkie litery æ zostaną zastąpione literami C, è zamienione zostaną na E, ú na G itd. Na ekranie w tym przypadku zobaczymy następujący napis: QNMPCN UNGF Ćwiczenie 7.25. Zamień wszystkie wielkie litery na małe. Rozwiązanie WUTDKPRGTN VGMUV 0C M.C9+CVW4G L'U6 MN#Y+U 5*+(6 VGMUV ` [#C RTKPV VGMUV
  • 43. 82 Perl. Ćwiczenia Wykorzystamy tu operator transliteracji VT, lecz zapisany krócej (i równowa nie) jako [. Zestaw wszystkich wielkich liter uzyskujemy stosując konstrukcję # i analogicznie otrzy- mamy zestaw małych liter. Efekt mo na zobaczyć na ekranie. PC MNCYKCVWTG LGUV MNCYKU UJKHV Ta zamiana nie uwzględnia liter typowych dla języka polskiego. Nale y dla nich wykonać dodatkową operację transliteracji. WUTDKPRGTN VGMUV RK5äE W [Y# -NC9KU# 5*+(6 VGMUV ` [#C VGMUV ` VTäçù ¦ æèú Î RTKPV VGMUV Tym razem nasz tekst będzie wyglądał tak: RKUæE W [YC MNCYKUC UJKHV Ćwiczenie 7.26. Policz, ile razy w zmiennej tekst występuje litera a. Rozwiązanie WUTDKPRGTN VGMUV CDDCE NKEDC VGMUV ` [C RTKPV 9 VGM EKG VGMUV NKVGTC C Y[UVæRK C NKEDC TC[P Liczba znaków we wzorcu i specyfikacji zamiany nie musi być równa. Litery C w naszym przypadku nie zostaną zamienione, a na ekranie zobaczymy następującą informację: 9 VGM EKG CDDCE NKVGTC C Y[UVæRK C TC[ Ćwiczenie 7.27. Wyrzuć powtarzające się obok siebie znaki ze zmiennej tekst. Rozwiązanie WUTDKPRGTN VGMUV CDDCE VGMUV ` VTC#U RTKPV VGMUV Zastosowanie modyfikatora U (litera na końcu) dla operatora VT powoduje, e wszystkie takie same znaki znajdujące się obok siebie traktowane są podczas zamiany jako jeden. Dzięki zastosowaniu operacji zapisanej powy ej, zamianie (kasowaniu duplikatów) ulegną tylko litery. Pojawi się następująca wartość zmiennej: CDCE
  • 44. Rozdział 7. Wyra enia regularne 83 Nale y zwrócić uwagę, e usunięte zostały jedynie litery znajdujące się obok siebie. Litera C występowała dwukrotnie i tak jest nadal. Usuwanie wszystkich powtórzeń spowoduje zapis przedstawiony poni ej. WUTDKPRGTN VGMUV CDDCE VGMUV ` VTEU RTKPV VGMUV We wzorcu nie ma wpisanych adnych znaków. Jednak e dzięki modyfikatorowi E, ozna- czającemu odwrócenie dopasowania wzorca, operator VT wykona zadane operacje na ka dym znaku. Nie będzie to zamiana (wzorzec zamiany jest pusty), lecz usunięcie powtórzeń (modyfikator U). Tym razem efekt będzie inny. CDCE Operator VT mo e w tym przypadku zostać zastąpiony przez operator zamiany U. WUTDKPRGTN VGMUV CDDCE VGMUV ` U I Widzimy tu dowolny znak oznaczony kropką ujętą w nawiasy. W ten sposób dla ka dego znaku (modyfikator g) ustawiona zostaje zmienna , której wartością jest ten znak. Usta- wionej zmiennej nie mo na jednak u ywać w lewej części operatora (we wzorcu). Zamiast niej u ywa się odpowiadającego jej wyra enia — . Zatem sekwencja oznacza dowolny znak, a po nim ten sam znak, występujący co najmniej raz (znak ). Zestaw takich samych znaków zostanie zamieniony na jednokrotne wystąpienie znaku ( ).