Perl00.qxd
4/3/2003
2:48 PM
Page v
Tartalomjegyzék Elsõ hét 1. nap
Alapok
Bevezetés a Perlbe
A Perl lényege és eredete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Miért érdemes ismerni a Perlt? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 A Perl hasznos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 A Perl-höz nem kell semmilyen cifra program . . . . . . . . . . . . . . . . . . . . 6 A Perl gyorsan programozható . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 A Perl hordozható . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 A Perl hatékony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 A Perl rugalmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 A Perlt könnyû elsajátítani . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 A Perl-közösségre számíthatunk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Ismerkedés a Perl nyelvû programozással . . . . . . . . . . . . . . . . . . . . . . . . . 9 A Perl telepítése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Egysoros Perl kódok és parancsállományok . . . . . . . . . . . . . . . . . . . . 10 A szokásos példa: Helló, világ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Az egysoros létrehozása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Mit tegyünk, ha nem mûködik? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Hogyan mûködik? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Újabb példa: Helló, világ!, parancsállományként . . . . . . . . . . . . . . . . . . . 12 A Helló, világ! parancsállomány létrehozása . . . . . . . . . . . . . . . . . . . . 12 A Helló, világ! program futtatása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Mit kell tennünk, ha a Helló, világ! program nem mûködik? . . . . . . . . 15 Hogyan mûködik? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 A hibajelzésekrõl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Egy másik példa: Echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Perl00.qxd
4/3/2003
2:48 PM
vi
Page vi
Tartalomjegyzék Egy 3. példa: a Cookie Monster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 A Perl-dokumentáció beszerzése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Segítségkérés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2. nap
Karakterláncok és számok használata (skaláris adatok)
Skaláris adatok és skaláris változók . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Számok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Karakterláncok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Számok átalakítása karakterláncokká és viszont . . . . . . . . . . . . . . . . . 34 Skaláris változók . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Perl parancsfájlok készítése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Aritmetikai mûveleti jelek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Aritmetika és pontosság . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Egysoros programok: egyszerû számológép . . . . . . . . . . . . . . . . . . . . . . . 40 Példa: Fahrenheit fok átalakítása Celsius fokká . . . . . . . . . . . . . . . . . . 40 Ellenõrzõ és összehasonlító mûveleti jelek . . . . . . . . . . . . . . . . . . . . . . . . 42 Az igazság szó jelentése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Egyenlõségi és viszonyító mûveletek . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Logikai mûveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Mintaillesztés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Még egy példa: még sütit! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Karakterláncok és minták idézõjelbe rakása . . . . . . . . . . . . . . . . . . . . 52 Idézõjel nélküli karakterláncok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Kisbetûs és nagybetûs váltókarakterek . . . . . . . . . . . . . . . . . . . . . . . . 53 További tudnivalók a karakterláncokon belüli változóbehelyettesítésrõl . 54 Oktális és hexadecimális számok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Perl00.qxd
4/3/2003
2:48 PM
Page vii
Tartalomjegyzék
3. nap
További skaláris adatok és mûveletek
4. nap
Listák és tömbök használata
Értékadó mûveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Növelõ és csökkentõ mûveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Karakterláncok összefûzése és ismétlése . . . . . . . . . . . . . . . . . . . . . . . . . 66 A mûveletek sorrendje és csoportosíthatósága . . . . . . . . . . . . . . . . . . . . . 67 Számok keresése mintaillesztéssel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Egy példa: egyszerû statisztika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Bemenet és kimenet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Fájlleírók és szabványos be- és kimenetek . . . . . . . . . . . . . . . . . . . . . 75 Egy sor beolvastatása a szabványos bemenetrõl a <STDIN> utasítással . . 76 Kiíratás a szabványos kimenetre a print paranccsal . . . . . . . . . . . . . . . 77 A printf és a sprintf függvény . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Még egy példa: tõzsde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 A bemenet bekérése és ellenõrzése . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Az eredmény kiszámítása és kiíratása . . . . . . . . . . . . . . . . . . . . . . . . . 84 Egy megjegyzés a függvények használatával kapcsolatban . . . . . . . . . . . . 85 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Számokkal és karakterláncokkal kapcsolatos hasznos függvények . . . 86 Bitmûveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 A cmp és a <=> mûvelet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Függvények és függvényszerû mûveletek . . . . . . . . . . . . . . . . . . . . . . 88 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Listaadatok és változók . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Listák és tömbök meghatározása és használata . . . . . . . . . . . . . . . . . . . . . 99 Listák létrehozása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Listák létrehozása a tartománymûvelet segítségével . . . . . . . . . . . . . . 101 Az értékadás és a listák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 A tömb elemeinek elérése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Tömbök növelése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Tömb hosszának lekérdezése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Listák és tömbök rendezése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Egy tömb összes elemének feldolgozása . . . . . . . . . . . . . . . . . . . . . . 106 Tömb végének megkeresése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 A nem meghatározott értékek kezelése . . . . . . . . . . . . . . . . . . . . . . . 107 Elemek törlése a tömbbõl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Elem meglétének ellenõrzése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Példa: további statisztikák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Listás és skaláris környezet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
vii
Perl00.qxd
4/3/2003
2:48 PM
viii
Page viii
Tartalomjegyzék Mi a környezet? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 A tömbben lévõ elemek számának lekérdezése . . . . . . . . . . . . . . . . 115 Környezet és értékadás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Egyéb környezetek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 A scalar függvény . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Bemenetek, kimenetek és listák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 A <STDIN> használata listás környezetben . . . . . . . . . . . . . . . . . . . . 119 Listák kiíratása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Negatív tömbindexek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Még pár szó a tartományokról . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 A chomp és a chop függvény használata listákhoz . . . . . . . . . . . . . . 122 Kimeneti mezõ, kimeneti rekord és listaelválasztók . . . . . . . . . . . . . . 122 Érvénytelen környezet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
5. nap
Kivonatok használata
Kivonatok, tömbök és listák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Kivonatok meghatározása és használata . . . . . . . . . . . . . . . . . . . . . . . . . 135 A listás környezet és a kivonatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Tömbök, listák és kivonatok átalakítása egymásba . . . . . . . . . . . . . . 137 A kivonat elemeinek elérése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Kivonat elemeinek törlése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 A kivonat összes értékének feldolgozása . . . . . . . . . . . . . . . . . . . . . . 139 A kivonatok és a környezet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Példa: elõfordulási gyakoriság megállapítása a statisztikai programmal . 142 Adatok kinyerése tömbökbe vagy kivonatokba a split függvénnyel . 146 Egy másik példa: nevek betûrendes listája . . . . . . . . . . . . . . . . . . . . . . . 148 Még néhány minta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Még egy példa: tõzsdei árfolyamváltó . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Perl00.qxd
4/3/2003
2:48 PM
Page ix
Tartalomjegyzék
6. nap
Feltételek és ciklusok
7. nap
Néhány hosszabb példa elemzése
Második hét
Tegyünk többet
Összetett utasítások és utasításblokkok . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Feltételek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 if, if...else és if...elsif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 unless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 A ?..: feltételes mûvelet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Logikai mûveletek használata feltételként . . . . . . . . . . . . . . . . . . . . . 171 A while ciklusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Egy példa: számkiválasztás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Mûveletismétlés a foreach és a for ciklusokkal . . . . . . . . . . . . . . . . . . . . 181 foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 A ciklusok vezérlése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 last, next és redo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 A ciklusok felcímkézése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 A $_ (alapértelmezett) változó használata . . . . . . . . . . . . . . . . . . . . . . . . 190 Bemenet beolvastatása fájlokból while ciklusokkal és <> utasításokkal . 191 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Feltételek és ciklusok módosítói . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 A continue blokkok használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Szerkezetek létrehozása a switch és a case utasítással . . . . . . . . . . . . 196 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Statisztika szebb eloszlási görbével . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Számok kiíratása betûvel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Szöveg átalakítása HTML-lé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 A parancsfájl mûködése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 A bemenõ fájl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 A parancsfájl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
8. nap
Listák és karakterláncok kezelése
Tömb- és kivonatszeletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Lista rendezése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Keresés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
ix
Perl00.qxd
4/3/2003
2:48 PM
x
Page x
Tartalomjegyzék Példa: további nevek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Lista elemeinek módosítása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 push és pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 shift és unshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 splice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Egyéb listakezelési lehetõségek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Karakterláncok kezelése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 index és rindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 substr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
9. nap
Mintaillesztés szabályos kifejezésekkel
A mintaillesztésrõl általában . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Mintaillesztõ mûveletek és kifejezések . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Egyszerû minták . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Karaktersorozatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Keresés szó- vagy sorhatárokon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Több minta egyidejû használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Mintaillesztés karaktercsoportokra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Karakterosztályok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Karaktertartományok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Különleges osztályok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Bármely karakter keresése a . (pont) segítségével . . . . . . . . . . . . . . . 264 Karakterek többszöri elõfordulásának keresése . . . . . . . . . . . . . . . . . . . 264 Nem kötelezõ karakterek keresése a ? karakterrel . . . . . . . . . . . . . . . 265 Többszöri elõfordulás vagy az elõfordulás hiánya keresés a * karakterrel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Legalább egy elõfordulás keresése a + karakterrel . . . . . . . . . . . . . . . 267 Az elõfordulások számának korlátozása . . . . . . . . . . . . . . . . . . . . . . 267 Példa: Találgatóprogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Minták használata tesztekben és ciklusokban . . . . . . . . . . . . . . . . . . . . . 272 Minták és változók . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Minták és ciklusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Még egy példa: Számláló . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 A minták kiértékelési sorrendje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Perl00.qxd
4/3/2003
2:48 PM
Page xi
Tartalomjegyzék Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 A minták használatának egyéb lehetõségei . . . . . . . . . . . . . . . . . . . . 276 Határolójelek és váltókarakterek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
10. nap
Szabályos kifejezések haladóknak
11. nap
Alprogramok készítése és használata
A találatok kinyerése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Visszautalás zárójelekkel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Mentett találatok változói . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Találatok különbözõ környezetben . . . . . . . . . . . . . . . . . . . . . . . . . . 289 A mohóságról . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Példa: Jellemzõk kinyerése HTML elemekbõl . . . . . . . . . . . . . . . . . . . . . 292 Keresés és csere mintákkal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 A split függvény használatának további lehetõségei . . . . . . . . . . . . . . . . 295 Mintaillesztés több sorban történõ kereséssel . . . . . . . . . . . . . . . . . . . . . 296 Többsoros bemenet tárolása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Újsorokat tartalmazó bemenet kezelése . . . . . . . . . . . . . . . . . . . . . . . 298 Kapcsolók és váltókarakterek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Példa: Képkinyerõ program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Tippek szabályos kifejezések létrehozásához . . . . . . . . . . . . . . . . . . 305 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 További metakarakterek, változók és kapcsolók . . . . . . . . . . . . . . . . 307 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Alprogramok vagy függvények? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Egyszerû alprogramok meghatározása és hívása . . . . . . . . . . . . . . . . . . . 319 Egy példa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Alprogramok meghatározása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 Alprogramok hívása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 Egy példa: a stats program utódja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Értékek visszaadása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Helyi változók használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Változók átadása az alprogramok számára . . . . . . . . . . . . . . . . . . . . . . . 327
xi
Perl00.qxd
4/3/2003
2:48 PM
xii
Page xii
Tartalomjegyzék Paraméterek átadása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Paraméterek kezelése az alprogramon belül . . . . . . . . . . . . . . . . . . . 328 Hivatkozással átadott paraméterek . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Az alprogramok és a környezet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Újabb példa: a stats program menüvel bõvítve . . . . . . . . . . . . . . . . . . . . 331 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Helyi változók kódblokkokban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 A paraméterek zárójeleinek elhagyása . . . . . . . . . . . . . . . . . . . . . . . . 339 Paraméterek átadása a @_ tömb segítségével . . . . . . . . . . . . . . . . . . . 340 Névtelen alprogramok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Alprogramok prototípusainak használata . . . . . . . . . . . . . . . . . . . . . . 340 A caller függvény . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
12. nap
Hibakeresés a Perlben
Egyszerû példa a hibakeresõ használatára . . . . . . . . . . . . . . . . . . . . . . . 352 A hibakeresõ indítása és futtatása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 A végrehajtás nyomon követése . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 A program lépésenkénti végrehajtása . . . . . . . . . . . . . . . . . . . . . . . . 359 A forráskód kiíratása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Változók értékeinek kiíratása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Töréspontok beállítása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Egyéb parancsok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Egy apró megjegyzés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 A Perl hibakeresõ parancsai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Grafikus hibakeresõ használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Különbözõ hibakeresõk használata . . . . . . . . . . . . . . . . . . . . . . . . . . 367 A Perl interaktív futtatása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Gyakori buktatók és FAQ-k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Perl00.qxd
4/3/2003
2:48 PM
Page xiii
Tartalomjegyzék
13. nap
Hatókör, modulok és átvett kódrészletek
14. nap
Néhány hosszabb példaprogram
Globális változók és csomagok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Gondok a globális változókkal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 A csomagokról . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 A csomagok és változók mûködése . . . . . . . . . . . . . . . . . . . . . . . . . . 375 Egyszerû példa csomagok használatára . . . . . . . . . . . . . . . . . . . . . . . 377 Nem csomagbeli globális változók használata . . . . . . . . . . . . . . . . . . 378 Helyi hatókör helyi változók . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 A helyi változókról és hatókörükrõl . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Helyi változók meghatározása a my és a local kulcsszóval . . . . . . . . 381 Perl modulok használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Az elnevezésekrõl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Hozzájutás a modulokhoz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 A modulok átvétele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 A modulok használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Objektumközpontú modulok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 A modulok szerkezete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Szimbólumok kézi átvétele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 Átvételi azonosítók . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Pragmák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Az English modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Egy példa: a Text::Wrap modul használata . . . . . . . . . . . . . . . . . . . . . . . 393 A CPAN modulok használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Mire vigyázzunk? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 A CPAN modulok letöltése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 CPAN modulok telepítése Windows környezetben a PPM segítségével . 396 A CPAN modulok használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Típusegyesítés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 A local és a my kulcsszavak közti további különbségekrõl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Egy példa: local vagy my? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Csomagok elõkészítése és lezárása a BEGIN és END alprogramokkal . 401 Kódrészletek átvétele a require függvénnyel . . . . . . . . . . . . . . . . . . . 402 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Címlista keresési lehetõséggel (address.pl) . . . . . . . . . . . . . . . . . . . . . . . 410 A program mûködése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 A címlistafájl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
xiii
Perl00.qxd
4/3/2003
2:48 PM
xiv
Page xiv
Tartalomjegyzék Bepillantás a program szerkezetébe . . . . . . . . . . . . . . . . . . . . . . . . . 412 A címek beolvasása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 A keresés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 A rekord kiíratása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 A kód . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Internetes naplófájlelemzõ (weblog.pl) . . . . . . . . . . . . . . . . . . . . . . . . . . 421 A program mûködése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Az internetes naplófájl felépítése . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 A program szerkezete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 A naplófájl feldolgozása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Az eredmények kiíratása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 A &getdomains() alprogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 A &gettop() alprogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 A naplófájlelemzõ kódja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Harmadik hét Perl haladóknak 15. nap
Kimenet, bemenet és fájlkezelés
Kimenet és bemenet fájlleírókkal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Fájlleírók létrehozása az open függvénnyel . . . . . . . . . . . . . . . . . . . . 440 A die függvény . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 Olvasás fájlleíróból . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Írás fájlleíróba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 Bináris fájlok írása és olvasása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 Fájlleírók lezárása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Példa: üzenetek tárgyainak kigyûjtése és lemezre mentése . . . . . . . . . . . 446 Fájlellenõrzések . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 Példa fájlellenõrzésre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 A programparaméterek és az @ARGV használata . . . . . . . . . . . . . . . . . . 452 Az @ARGV felépítése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 Kapcsolók és Getopt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 Egy másik példa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 Az open függvény és a fájlleírók . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 Egyéb fájlmûveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Kimenet és bemenet haladó szinten . . . . . . . . . . . . . . . . . . . . . . . . . 460 DBM fájlok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Idõbélyegzõk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Perl00.qxd
4/3/2003
2:48 PM
Page xv
Tartalomjegyzék
16. nap
CGI programozás a Perlben
17. nap
Fájlok és könyvtárak kezelése
Mielõtt belevágnánk... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Hogyan mûködik a CGI? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 CGI programok készítése, az ûrlaptól a válaszig . . . . . . . . . . . . . . . . . . . 474 Az ûrlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 A program elkészítése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 A program tesztelése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 CGI programok fejlesztése a CGI.pm modullal . . . . . . . . . . . . . . . . . 479 A CGI.pm használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Ûrlapbemenet feldolgozása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 HTML elõállítása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 Példa: egy felmérés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 Az ûrlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 A program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 CGI változók használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 POST és GET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 Átirányítás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 Sütik és fájlfeltöltés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 A CGI programok és a biztonság . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 A Perl beágyazása a webkiszolgálóba . . . . . . . . . . . . . . . . . . . . . . . . 493 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 Fájlkezelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Fájlok átnevezése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Hivatkozások készítése és követése . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Fájlok és hivatkozások eltávolítása . . . . . . . . . . . . . . . . . . . . . . . . . . 505 Egyéb fájlmûveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 Könyvtárak kezelése és bejárása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 Könyvtárak bejárása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 Fájllista kiíratása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 Könyvtárak létrehozása és eltávolítása . . . . . . . . . . . . . . . . . . . . . . . . 510 Példa: hivatkozások készítése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
xv
Perl00.qxd
4/3/2003
2:48 PM
xvi
Page xvi
Tartalomjegyzék Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
18. nap
A Perl és az operációs rendszer
19. nap
Hivatkozások használata
Unix szolgáltatások a Perlben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 Környezeti változók . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 Unix programok futtatása a system függvénnyel . . . . . . . . . . . . . . . . 525 Bemenet fordított aposztrófokkal . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Folyamatok használata: fork, wait és exec . . . . . . . . . . . . . . . . . . . . . 527 Egyéb Unix-függvények . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 Perl Windows rendszeren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 Átjárás a Unix-ba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 Beépített Win32 alprogramok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 Win32::MsgBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 Win32 folyamatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 A rendszerleíró adatbázis használata . . . . . . . . . . . . . . . . . . . . . . . . . 544 Egyéb Win32 modulok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 Csövek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 Jelzések . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 Egyszerû hálózatkezelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 Felhasználói felületek készítése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 Mi az a hivatkozás? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Általános áttekintés: hogyan használjuk a hivatkozásokat? . . . . . . . . . . . 557 Hivatkozás létrehozása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 Hivatkozások kiírása és használata . . . . . . . . . . . . . . . . . . . . . . . . . . 558 Hivatkozások feloldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 A hivatkozott adat módosítása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 Hivatkozások az alprogramok paraméterében és visszatérési értékében . 561 Alprogram-paraméterek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 Visszatérés az alprogramból hivatkozással . . . . . . . . . . . . . . . . . . . . . 564 Egy példa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 A hivatkozások egyéb felhasználásai . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 Listára mutató hivatkozások feloldása . . . . . . . . . . . . . . . . . . . . . . . . 567 Hivatkozás blokkokkal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 A ref függvény . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
Perl00.qxd
4/3/2003
2:48 PM
Page xvii
Tartalomjegyzék Memória és szemétgyûjtés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 Beágyazott adatszerkezetek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 Mi az a beágyazott adatszerkezet? . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 Névtelen adatok használata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 Adatszerkezetek kialakítása névtelen adatokkal . . . . . . . . . . . . . . . . 574 Kivonatba ágyazott tömbök . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 Beágyazott kivonatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 Más adatszerkezetek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 Adatszerkezetek felépítése létezõ adatokból . . . . . . . . . . . . . . . . . . . . . . 578 Adatok elérése a beágyazott adatszerkezetekben . . . . . . . . . . . . . . . . . . 580 Egy másik példa: mûvészek és mûveik adatbázisa . . . . . . . . . . . . . . . . . 581 A hivatkozások használatának elkerülése . . . . . . . . . . . . . . . . . . . . . . . . 586 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 Gyors hivatkozás skalárokra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 Szimbolikus hivatkozások . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 Hivatkozás típusegyesítésekre és fájlleírókra . . . . . . . . . . . . . . . . . . . 589 Hivatkozás alprogramokra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
20. nap
Ami kimaradt
Perl egysorosok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 Objektumközpontú programozás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 Hogyan fogjunk hozzá? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 Az alapok (azok számára, akik jártasak az objektumközpontú programozásban) . . . . . . . . . . . . . . . . . . . . . . 605 Példa: objektumközpontú modulok használata . . . . . . . . . . . . . . . . . . . 612 Hálózatkezelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615 POD fájlok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618 POD fájlok létrehozása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619 POD beágyazása a programokba . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 Kódkiértékelés menet közben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 Gyakran használt modulok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621 LWP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621 Elektronikus levélküldés a Net::SMTP modullal . . . . . . . . . . . . . . . . . 623 XML-kezelés a Perlben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 Nemzetközi Perl programok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627 Biztonság a Perl programokban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627 PerlScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 A Perl 6 újdonságai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 Mélyvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
xvii
Perl00.qxd
4/3/2003
2:48 PM
Page xviii
xviii
Tartalomjegyzék Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 Kérdések és válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 Mûhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 Kvíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633 Válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 Kvíz válaszok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 Gyakorlatok megoldása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
21. nap
Néhány hosszabb példa
Tõzsdei portfoliókezelõ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 Az adatfájl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641 A program mûködése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642 Webes feladatlista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 Az adatfájl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656 A program mûködése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657 Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Függelékek A függelék
A Perl beépített függvényei
B függelék
A Perl telepítése Unix rendszerre
C függelék
A Perl for Windows telepítése
Tárgymutató
737
További tájékoztatás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 Perl függvények . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691 Szükség van-e a telepítésre? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722 A Perl beszerzése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722 A rendszerhez kapott csomag telepítése . . . . . . . . . . . . . . . . . . . . . . 723 Bináris fájlok letöltése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 A forráskód (és a szükséges eszközök) letöltése . . . . . . . . . . . . . . . . 724 A Perl kicsomagolása és lefordítása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 A configure program futtatása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 A make futtatása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729 További források . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730 A Perl for Windows letöltése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732 A Perl for Windows telepítése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 A Perl for Windows futtatása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 A Perl forráskódjának letöltése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735 További információ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735