Operációs rendszerek gyakorlat 10. Gyakorlat Vakulya Gergely
Az alapértelmezett változó - I. Sok függvény és vezérlési szerkezet alapértelmezett változóval tömörebbé tehető $_ while, <>, print, stb. 2
Az alapértelmezett változó - I. Egy egyszerű példa: while ($sor=<stdin>) { print $sor; } 3
Az alapértelmezett változó - II. Ugyanez alapértelmezett változóval: while (<STDIN>) { print $_; } 4
Az alapértelmezett változó - III. Tömörebben és egyszerűbben while (<>) { print; } 5
Reguláris kifejezlések használata A Perl nagy erőssége a reguláris kifejezések egyszerű használata Két gyakori művelet: Illesztés (match, m) Csere (substitution, s) 6
Reguláris kifejezések illesztése $sor= szilva alma korte ; if ($sor=~m/alma/) { print Illeszkedik\n ; } else { print Nem illeszkedik\n ; } 7
Rövidítés alapértelmezett változóval $_= szilva alma korte ; if (/alma/) { print Illeszkedik\n ; } else { print Nem illeszkedik\n ; } 8
Illesztési példák Nem csak szavakat, hanem bármilyen reguláris kifejezést is illeszthetünk. /alma../ alma után két tetszőleges karakter /a.*a/ a, tetszőleges karakterek, majd a /alfa beta/ alfa vagy beta /e(r k)/ e után r vagy k /[A-Z]*[^A-Z]*/ Akárhány nagybetű 9
Karakter-osztályok - I. Perl-ben is használhatók karakterosztályok: \w word : Minden kis-és nagybetű, valamint az aláhúzás jel (_) \s space : Whitespace karakterek (space, tabulátor, stb) \d digit : Számok 10
Karakter-osztályok - II. A karakter-osztályok komplementerei is egyszerűen megadhatók: \W: Minden, ami nem tartozik a \wbe \S: Minden, ami nem tartozik a \sbe \D: Minden, ami nem tartozik a \dbe 11
Az illeszkedő rész kinyerése Előfordulhat, hogy az illesztett kifejezést illeszkedő részét is meg szeretnénk kapni Illesztés után ez a $& speciális változóban tárolódik 12
Csoport képzése ****** A reguláris kifejezésen belül használhatunk zárójeleket, így csoportokat alakíthatunk ki. A csoportra illeszkedő stringet kinyerhetjük /(\w+) (\w+)/ print Vezeteknev:.$1; print Keresztnev:.$2; 13
Csere reguláris kifejezéssel Szintaxis: s/mit/mire/; (Alapértelmezett változóval) $var=~s/mit/mire/; (Bármely változóval) s/veszpremi Egyetem/Pannon Egyetem/; A zárójelezés itt is használható: s/(glomer)/censored $1/; 14
Globális csere Az előző módszer csak az első találatot cseréli. Az összes találat cseréjéhez a következő szintaxis használható: s/mit/mire/g; (g=global) 15
Tabulált adatbázisok használata - I. Reguláris kifejezések használatával egyszerűen kezelhetőek tabulált adatbázisok A tabulált adatbázis egy szövegfájl, hasonló sorokkal: Domotor Igor Felsoberecki 3985 06-70-753-2527 Bejczy Eva Saska 8308 06-85-220-704 16
Tabulált adatbázisok használata - II. Az adatbázis feldolgozása: open(be, "lista_nagy.txt") or die("hiba\n"); while($sor=<be>){ chomp($sor); $sor=~/(\w+ \w+)\t(\w+)\t(\d+)\t(.*)$/; print("nev: ".$1."\n"); print("lakhely: ".$2."\n"); print("iranyitoszam: ".$3."\n"); print("telefonszam: ".$4."\n"); print("\n");} 17
Tabulált adatbázisok használata - III. A mezők darabolása után azok szintén darabolhatók, például a név vezeték- és keresztnévre, a telefonszám körzetszámra és egyébre. Példa: Mobilosok és vezetékesek számlálása 18
Stringek vágása A stringek darabolása egyszerűbben is megoldható: split(/elválasztó/,string); A függvény visszatérési értéke egy tömb lesz, amely az egyes mezőket tartalmazza. A függvénynek megadható egy limit is: split(/elválasztó/,string,lim 19
Példa a split-re @a=split(/[\t ]/,"aaaa bbb\tccccc"); foreach $a (@a) { print $a."\n"; } Az elválasztó tetszőleges reguláris kifejezés lehet. 20
Mezők összeillesztése join(elválasztó,tömb); A függvény visszatérési értéke egy string. $bejegyzes=join( \t, ( név, cím, telefon )); 21
Hash-ek használata A hash (asszociatív tömb) egy olyan 'tömb', aminek az elemeit nem számok indexelik, hanem skalárok (stringek, számok, stb). $h{ kulcs }= ertek ; Fontos függvénye a keys, ami egy tömbben visszaadja a hash kulcsait. 22
Hash bejárása foreach $kulcs (keys %hash) { print $hash{$kulcs}. \n ; } 23
HTML file feldolgozása (Külön forrásfile-ban) A tavalyi egyik beugró feladathoz nagyon hasonló: A Glomeren található eredmenyek_nappali.html-ből gyűjtsük ki a Neptun kódokat és grafikusan, csillagok segítségével rajzoljunk grafikont a pontokból. 24
A perl modulkezelő A Perl-hez rengeteg modul érhető el (cpan.org) A modulok között függőségi reláció van definiálva (adott modul működéséhez mely más modulokra van szükség) A modulok automatizált kezelésére a Perl beépített eszközzel rendelkezik 25
Perl programok 'fordítása' A Perl programokból önállóan használható (standalone) végrehajtható file készíthető. Ehhez a pp modulra van szükség. pp -l libxml2.dll -l iconv.dll -l zlib1.dll -o tcp_server.exe -M IO::Socket -M Net::hostent tcp_server_2.pl 26