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 9 /[A-Z]*[^A-Z]*/ Akárhány nagybetű
• • • •
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 2527
Felsoberecki
3985
•
Bejczy Eva
Saska
06-85-220-704
8308
06-70-753-
16
Tabulált adatbázisok használata - II. •
Az adatbázis feldolgozása:
•
open(BE, "lista_nagy.txt") or die("Hiba\n");
•
while($sor=
){
•
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