ugrás a tartalomhoz

Perl alapjai II. - Fejlesztői környezet, alapok

Bártházi András · 2004. Júl. 21. (Sze), 01.00
Perl alapjai II. - Fejlesztői környezet, alapok
Szombaton beugrottunk az Állatkertbe a tevéket (is) megnézni, így készült róluk pár fotó, tessék kattintani az egyik legjobban sikerült megtekintéséhez. Akit pedig a Perl érdekel, ma egy nagy falatunk lesz, a Perl eddigi történetének és jövőjének áttekintése után egy Perl fejlesztői környezetet fogunk kialakítani, majd megismerjük a Perl alap szintaktikáját, illetve változó típusait.

Telepítés, fejlesztői környezet és az alapok

A cikkben a Windows alatti telepítés lehetőségeit (más rendszereken a Perl általában külön telepítés nélkül rendelkezésre áll) tekintjük át, továbbá két ingyenesen elérhető programot is megismerünk, melyek aktív részei lehetnek fejlesztőkörnyezetünknek. Ezután egy nagyon egyszerű "Hello World!" programon keresztül az alap Perl szintaktikával ismerkedünk meg, s végül az alap változótípusokat nézzük át. Ma még nem írunk komoly programot, de ne csüggedjünk, lesznek érdekes dolgok! Kezdjük hát a telepítéssel.

Telepítés

Mint az előzőekben is említettem, Windowstól eltérő környezetek esetén (általában!) nem igényel különösebb telepítést a Perl, az esetek többségében már telepítve van. Ettől függetlenül röviden megnézzük, hogy erről hogyan bizonyosodhatunk meg, hogyan tudhatjuk meg, milyen verzió áll rendelkezésünkre. Ezután a Windows alatti telepítés rejtelmeit fogjuk megvizsgálni.

Ha a Perl forrására vagyunk kiváncsiak, magunk szeretnénk telepíteni, akkor a Perl modulok és általában a Perles programok legfőbb forrásához, a CPAN-hoz fordulhatunk, konkrétan a http://www.cpan.org/src/README.html címen kereshetjük meg magunknak a forráskódot. A forrásból való telepítésre nem térünk ki, aki ismeri a programok fordításának menetét UNIX környezetben, nem nagyon fog neki gondot okozni (néha jól jön!).

Perl telepítése UNIX/Linux/Mac OS X környezetben

A Perl telepítésére ezeknél a rendszereknél alapvetően nincs szükség. Elmondható például, hogy a Perl kedvenc disztribúcióm, az UHU-Linux lelkét képezi (a telepítő és a vezérlőpult alkalmazások is Perlben készültek), más Linuxokon (Suse, Debian, és a többi jópár darab) is általában alapértelmezett programként települ. A Mac OS X legújabb, 10.3.4-es verziójában a Perl 5.8.1-es változata található meg (régebbi Mac OS 7-9-re keressük fel a MacPerl oldal-t!).

Ezek a verziók a Perl elsajátításához teljesen megfelelőek számunkra, így inkább ahhoz nyújtok segítséget, hogy miként bizonyosodhatunk meg a Perl jelenlétéről, és verziószámáról egy konzol (xterm, eterm, Terminal, stb.) alkalmazás elindításával. Adjuk ki a következő parancsot, ami részletesen megjeleníti számunkra a verzió információkat::

perl --version
Erre egy ilyen választ fogunk körülbelül kapni:

This is perl, v5.6.1 built for i386-linux


Copyright 1987-2001, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.
Amennyiben nincs jelen mégsem a Perl környezet gépünkön, Linux alatt általában valamilyen telepítőcsomagként áll rendelkezésünkre, a dpkg-t, vagy az rpm-et, illetve az általunk megszokott, a programjaink telepítésére használt módszert használhatjuk itt is a telepítéshez.

Perl telepítése Windows környezetben

Windows alatt több lehetőség is rendelkezésünkre áll. Régebben (pár éve) az ActiveState cég ActivePerl csomagja volt az egyedüli lehetőség, azóta más telepítőkészletek is készülnek. A Perl egyik jelmondata, melynek lényege, hogy többféleképpen eljuthatunk célunkhoz, itt is érvényesül. A cikkben az ActivePerl csomag telepítését, illetve letöltési lehetőségeit fogjuk áttekinteni, mivel a tapasztalataim szerint ez a legjobb összeállítás.

ActivePerl

Az ActiveState által összeállított telepítőt a http://www.activeperl.com oldalon, a http://www.activeperl.com/Products/ActivePerl/ címen érhetjük el. Mielőtt végigmennénk a letöltési, illetve telepítési folyamaton, nézzük meg, mit nyújt számunkra ez a csomag:
  • Telepítőkészlet
  • Perl terjesztés
  • Perl csomagkezelő (PPM)
  • Dokumentáció (HTML formátumban is)
  • Perl for ISAPI (ISAPI kompatibilis webszerverekhez)
  • PerlScript (pl. Internet Explorerhez egy új scriptnyelv a Javascript és a VBScript mellé)
  • PerlEz (beágyazott feladatokhoz)
A választék bő, bár minket főleg a Perl terjesztés érdekel, de a mind a csomagkezelő, mind a dokumentáció nagyon jól használhatóak lesznek a későbbiekben számunkra (a tervek szerint legalábbis kitérünk a modulok telepítésére is majd egy későbbi cikkben).

A letöltéshez tehát kattintsunk a DOWNLOAD NOW! linkre, majd a NEXT-re (nem szükséges megadnunk az adatainkat), és több linket is kapunk, ahonnan letölthetjük a telepítőcsomagot. Alapvetően MSI ("Microsoft Installer") és ZIP megoldások közül választhatunk, mivel most a Windows-os telepítést nézzük. A legkényelmesebb, ha az MSI verziót választjuk, de nem árt tudnunk, hogy a gépünkön kell lennie Windows Installer 2.0-nek, vagy egy újabb változatának. Ezzel nincs is gond Windows XP (vagy Windows 2003) alatt, azonban ha Windows 98, vagy Windows 2000 alá szeretnénk a telepítést elvégezni, le kell töltenünk ezt is. A Win98/Me változat: http://downloads.activestate.com/contrib/Microsoft/MSI2.0/9x/InstMsiA.exe, illetve a WinNT/2000 változat: http://downloads.activestate.com/contrib/Microsoft/MSI2.0/NT/InstMsiW.exe.

Ha letöltöttünk minden szükséges eszközt, majd rendelkezésünkre áll a Microsoft Installer is, nekifoghatunk a telepítésnek indítsuk el a telepítőt! Olvassuk el a licencet, majd fogadjuk el! Ezután választhatunk, hogy miket szeretnénk feltelepíteni, ha nem gond, van hely, akkor léphetünk is tovább, egyébként válogassunk kedvünk szerint. Ha a PPM3 csomagkezelő telepítését is engedélyeztük (tegyünk eszerint), akkor megkérdezi a telepítő, hogy a PPM a saját használatáról küldhet-e jelentést az ActiveState-nek? Vérmérsékletünktől függően döntsük el, majd lépjünk tovább!

Ekkor négy választási lehetőséget adó checkbox jelenik meg, melyből lehet, hogy kettő inaktív, amennyiben nincsen a gépünkön IIS. Az első a Perl a PATH környezeti változóhoz adásáról szól, ezt mindenképpen válasszuk ki (hagyjuk alapértelmezetten kiválasztva), hiszen ekkor tudjuk majd a perl programnév paranccsal futtatni programjainkat, ahelyett, hogy beírnánk a teljes elérési útját a perl.exe-nek. A második checkbox arról szól, hogy hozzárendelje-e a .pl kiterjesztést a Perl futtatóhoz. Akkor járunk jól, ha ezt nem kérjük, legalábbis számomra kényelmesebb, ha parancssorból indítjom a programokat, mint hogy dupla kattintással. Az utóbbi hátránya az is, hogy hacsak nem írunk a kódunk végére valamit, hogy várjon, a program lefutása után egyből bezárul a command prompt, és nem látunk semmit a programunk futásából. Ezzel végére is értünk a hangolásnak, lépjünk tovább, majd válasszuk az Install gombot. A telepítő nekiáll a munkának, s meg sem áll, amíg nem lesz egy telepített rendszerünk. El lesz egy ideig, főként, hogy a dokumentációt is generálni fogja (ha kértük) az eredeti POD ("plain old documentation") Perl-es doksiíró formátumból. Egy újraindítás nem fog ártani (a PATH érvényre juttatása érdekében), és amúgyis, az olyan jó dolog.

A Perl a C:\Perl könyvtárba fog települt. Indítsunk el egy parancssort (Start menü, Futtatás, command.exe), majd adjuk ki a perl --version parancsot. Valami hasonlót kell, hogy kapjunk:

This is perl, v5.8.4 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)

Copyright 1987-2004, Larry Wall

Binary build 810 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Jun  1 2004 11:52:21

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.
Ha nem tettük, valószínűleg nincs az elérési útban a Perl-ünk, ekkor a C:\Perl\bin\perl --version parancs segíthet. Ezzel készen is áll gépünk a Perl a programozásra.

Fejlesztői környezet

A szerkesztéshez a legegyszerűbb eszközök a Midnight Commander, vagy Windows alatt a FAR Manager. Az előbbi azonban egy kicsit fapados, az utóbbi pedig fizetős program (bár kb. 10.000 Ft-ba kerül, és Magyarországon is beszerezhető). Így egy kicsit bonyolultabb, de ingyenes és sok funkcióval bíró lehetőséget fogunk megismerni (nem túl közelről). Az egyik a jEdit, a másik pedig az Eclipse. Mindkettő előnye az ingyenesség mellett az is, hogy Java-ban vannak írva, így teljesen platformfüggetlenek. Persze a Java miatt több erőforrást is igényelnek.

jEdit

A telepítés elég egyszerű, látogassuk meg a jEdit letöltés oldalt, és töltsük le a legfrissebb verziót. A letöltött program egy jar lesz, amit a java -jar programnév paranccsal tudunk elindítani. Válasszuk ki, hova szeretnénk telepíteni, majd telepítsük a programot. Ezután ajánlott egy gyorshivatkozás léterhozása, mely lefuttatja a telepített könyvtárban levő jedit.jar-t a java -jar jedit.jar paranccsal.

A jEditben a Perl-es kódszínezés egyből rendelkezésünkre áll, pár plugin van, így a további beállítási lehetőségeivel nem fogunk foglalkozni. Ha elindítjuk, majd .pl kiterjesztéssel elmentünk egy programot, a kódszínezés életbe is lép, nincs más teendőnk. Ha bővítményekre vágyunk, számos érdekes és hasznos darabot találunk a http://plugins.jedit.org/ címen.

Eclipse

Az Eclipse egy nagyobb darab, és komplexebb alkalmazáscsomag, mint a jEdit. A telepítése egyébként talán még egyszerűbb, natív Windows-os csomag áll rendelkezésünkre egy ZIP formájában. Látogassuk meg az http://eclipse.org-ot, menjünk a Download menüpontra, majd válasszunk ki egy nekünk tetsző tükröt. Válasszuk a 3.0-s verziót, aminek következtében például ide jutunk. Töltsük le a csomagot, majd tömörítsük ki egy nekünk szimpatikus könyvtárba. A telepítés körülbelül ennyi volt, a programot máris indíthatjuk az eclipse.exe futtatásával.


Egy kis gyorstalpaló Eclipse-ből: az indítás után meg kell adnunk a workspace könyvtárat. Ez az a könyvtár lesz, ahol a szerkesztendő fájlok szerepelnek. Az Eclipse projekt alapú megközelítést alkalmaz. A projektek itt, ebben a könyvtárban jönnek létre alapértelmezett esetben, ide menti a beállításokat is. Az ismerkedést úgy fogjuk tudni megkezdeni, hogy létrehozunk egy új projektet, s ehhez hozzáadunk egy fájlt. A többit mindenkinek az intuíciójára bízom, nézegesse végig a menüpontokat a lehetőségekért, illetve olvassa el a csomagban szereplő tutorialokat!

Az Eclipse alapból semmilyen formában nem ismeri a Perl nyelvet, telepítés után főként Java fejlesztésre alkalmas. Sebaj, viszont van hozzá egy nagyon jó plugin, mely EPIC névre hallgat. Egy Perl szerkesztőt, egy Perl hibakeresőt, és egy mintaillesztő kifejezés szerkesztőt foglal magában.

Eclipse alatt a pluginek telepítéséhez kétféle telepítési módot választhatunk. Az egyik, hogy simán letöltjük a plugin-t,
kicsomagoljuk, majd bemásoljuk az Eclipse könyvtárba a megfelelő helyre. A másik lehetőség az Eclipse Update menedzserje, amit a Help menüből, a Software Updates almenüből érhetünk el. Itt két lehetőség közül választhatunk, nekünk most a Search for new features to install fog kelleni. Ennek kiválasztása után nyomjuk le a New Remote Site gombot, majd írjuk be, hogy "EPIC", illetve hogy "http://e-p-i-c.sourceforge.net/updates". Válasszuk ki az EPIC ágat (a checkbox-ot pipáljuk ki), majd lépjünk a Nexttel tovább. Válasszuk ki megint az EPIC-et, majd megint a Nexttel lépjünk tovább. Fogadjuk el a licencet (elolvasás után), és még mindig Next a továbblépés. Végül kattinthatunk a Finish-re, majd az Install-ra. Erre letöltődik a Perl plugin, feladatunk már csak az, hogy eleget tegyünk az Eclipse kérésének, és indíttassuk újra.

Válasszuk a File menüből a New... Project menüpontot, válasszuk ki a Perl projektet, majd írjuk be, hogy "Weblabor" és kattintsunk a Finish gombra. A Navigator ablakban kattintsunk jobb egérgombbal a Weblaborra, majd írjuk be, hogy "teszt.pl". És voálá, máris szerkeszthetjük első Perl fájlunkat! Az EPIC kiterjesztés egy kis segítséget is nyújt ebben, a szerkesztés közben folyamatosan hívja a Perl értelmezőt, s ha hibás a programunk, egyből jelzi azt számunkra.

Teve a 'kertben

Kezdjünk neki

Nos, itt az ideje nekilátni a konkrét ismerkedésnek. Először egy kis gyorstalpaló: programjainkat a parancssorból kiadott perl programneve paranccsal fogjuk tudni futtatni, ahol értelemszerűen a programneve az általunk adott név lesz. Amennyiben nem az aktuális könyvtárban van a program, akkor a teljes elérési utat szükséges lesz megadni. UNIX szerű környezetek alatt, ha futtatási jogot adunk a fájlra (chmod 770), és az első sor a megfelelő "shebang" sort tartalamazza (lást mindjárt), akkor a ./programneve paranccsal is futtatni fogjuk tudni a programot.

Indulásként kedvcsinálónak vizsgáljuk meg a tipikusnak mondható "Helló Világ!" programot! Ennek keretében megízlelhetjük, hogy milyen is Perl-ben programozni -, s ennek során a legalapvetőbb dolgokra is fény fog derülni. Bár a bemutatandó program korántsem nem nevezhető bonyolultnak, a végletekig (amennyire csak lehet) ki fogjuk vesézni, hogy megérthessük, hogy mi miért van úgy, ahogy. Amennyiben megoldható lesz, ehhez hasonlóan fogok eljárni a többi példával is, a cél, hogy ne csak copy-paste megoldásokat mutassak be, hanem érthetővé váljon az is, hogy mi zajlik a háttérben. Erre nem mindig van szükségünk, nem kell tudnunk, viszont ha ismerjük, többet fogunk tudni kihozni programjainkból.

Első olvasásra biztos vagyok benne, hogy sok ilyen magyarázat bonyolultnak (talán unalmasnak is?) fog tűnni. Ettől nem kell megijedni, nyugodtan tovább lehet lépni, s majd a későbbiekben egyszer újra elolvasni ezeket a részeket. Itt nem egy iskolában vagyunk, nem kell egyből megérteni az olvasandókat, mindent jobban el lehet magyarázni. Ez azoknak, akiknek még idegen a terület, jól jöhet, azoknak, akik már tapasztaltabbak, lehet, hogy túlmagyarázás. Többször átolvasva a cikkeket reményeim szerint majd egyre érthetőbbé válnak, addig is, a cél a nyelv alapjainak megértése, és hogy kiindulópontot biztosítson a továbbiakhoz. Javaslom a bemutatott példák kipróbálását, módosítását és értelmezését: mi miért lehet úgy, ahogy van.

Ennyi mellébeszélés után jöjjön a lényeg, íme a "Hello Világ!" program Perlben:

#!/usr/bin/perl
print "Hello Világ!\n";
Ez a program csak két sort tartalmaz, vegyük sorra ezeket, lesz mit nézni rajta! Az első sor - az úgynevezett "shebang" sor - amennyiben programoztunk már UNIX rendszerek valamilyen shelljében, akkor ismerős is lehet számunkra. UNIX környezetben azt mondja meg az operációs rendszernek, hogy hol keresse azt a programot, amivel futtatni kell az állomány tartalmát. Ez a sor akár el is hagyható, de ha önállóan szeretnénk futtatni programunkat, akkor szükséges a használata. Windows környezet alatt való fejlesztés esetén általában nincs rá szükség, mivel az operációs rendszer ugyanezt a funkciót a program kiterjesztése alapján valósítja meg, de CGI programozás esetén Windows-os Apache webszerver alatt megadása szükséges (hacsak nem állítjuk be a szervert úgy, hogy felismerje a programunkat, és mégse kelljen megadni).

Mi történik, ha nem kell ez a sor, és mégis benne hagyjuk? Semmi. A # karakter ugyanis a Perl nyelvben a megjegyzéseket jelöli, így a Perl értelmező figyelmen kívül fogja hagyni a sort. Tegyük be azonban ilyenkor is, hiszen előfordulhat, hogy át szeretnénk térni UNIX szerű operációs rendszerre, amikor hasznát vehetjük. Szokjuk meg, hogy ott van.

A második sor a valószínűleg sokaknak ismerősnek tűnő print utasítást tartalmazza. Ennek a (beépített) eljárásnak a feladata a paraméteréül kapott értékek képernyőre kiírása, illetve megfelelő paraméterezés esetén fájlba, vagy más kimeneti eszközre való továbbküldése. A fájlkezelésről még egy későbbi cikkben lesz szó.

A soron még láthatjuk, hogy egy pontosvesszővel zárul, ugyanis Perlben ezzel kell elválasztani az utasításokat, nincs meg az a szabadságunk ezen a téren, mint a JavaScriptben, ahol a pontosvesszők akár el is hagyhatóak. A Pascal nyelvhez hasonlóan egy blokk vége előtt nem kötelező kitenni (csak utasítások között, utasítás után nem szükséges), de ha megszokjuk, hogy mindig ott van, akkor egy tipikus hibalehetőséget küszöbölünk ki.

A program a futása során nem csinál semmi különöset, egyszerűen megjeleníti a képernyőn a "Helló Világ!" üzenetet, majd befejezi futását. Más nyelveknél esetleg megszokott end., illetve hasonló záróutasításra nincs szükségünk.

De maradjunk még egy kicsit a második sornál! A sor végén található \n-ről még nem beszéltünk. A \ (visszaper, repjel ízlés szerint) az úgynevezett "escape-elő", vagy kiemelő karakter. A jelentése: egy különleges, másként nem bevihető karakter következik. Számos ilyen létezik, ezek közül az n betű a 'new line', azaz 'új sor'-nak a rövidítése. Emiatt a print utasítás egy soremelést is ki fog írni a képernyőre (próbáljunk ki kétszer, háromszor beírva, s figyeljünk arra, hogy mindegyik elé rakjunk egy \-t). A \n jelen kívül gyakran használt jel még a \r ('return') és a \t (tabulátor). A következő táblázatban a \ jel segítségével feloldható jeleket gyűjtöttem össze (főként az angol elnevezésüket használtam, mivel a legtöbbnek nincs jó magyar megfelelője):

\n   - new line (új sor)
\r   - return (vissza a sor elejére)
\t   - tab (tabulátor)
\f   - formfeed
\b   - backspace
\v   - vertical tab
\a   - bell
\e   - escape
\007 - egy 8-as számrendszerben leírt ASCII karakter
\x7f - egy 16-os számrendszerben leírt ASCII karakter
\cC  - egy "control" karakter
\\   - backslash
\"   - double quote
\l   - a következő karakter kisbetűs legyen
\L   - a következő karakterek kisbetűsek legyenek \E-ig
\u   - a következő karakter nagybetűs legyen
\U   - a következő karakterek nagybetűsek legyenek \E-ig
\E   - lezárja a \L-t és a \U-t
Mi van akkor, ha a feladat a 'c:\nem' szöveg kiíratása és nem 'c:<újsor>em'-et szeretnénk kiíratni? Két fő választási lehetőségünk van: egyrészt használhatjuk a fenti táblázatban is szereplő \\ jelet - ehelyett csak egy \ jelenik meg -, vagy van egy másik lehetőségünk is, ha nem szeretnénk hogy a Perl "feloldja" a különleges karaktereinket: használjunk az idézőjel helyett az aposztrófot. A következő példát lefuttatva megtekinthetjük a különbséget:

#!/usr/bin/perl

print "Feloldott újsor: >\n<"; print "\n";
print 'Feloldatlan újsor: >\n<'; print "\n";
Ezt fogjuk látni:

>perl proba.pl
Feloldott újsor: >
<
Feloldatlan újsor: >\n<
A visszaper ezen kívül lehetőséget nyújt számunkra idézőjeleken belül idézőjelek, illetve aposztrófokon belül aposztrófok megadására. Ha egy idézőjeles üzeneten belül egy idézőjelet szeretnénk kiíratni, akkor a következőképpen kell eljárnunk:

print "Egy \" kiírása";
Az aposztrófos megadás esetén hasonlóan járhatunk el:

print 'Egy \' kiírása';
Még mindig nem fejeztük be, de most már valóban az utolsó gondolat jön ebben a témakörben. A Perl nyelvbe ugyan be van építve a 'print' utasítás, de teljesen a később bemutatandó metódusokhoz (függvények és eljárások gyűjtőneve) hasonlít a meghívása, melyről itt ejtenék szót. A legtöbb nyelvben a metódusok paramétereit zárójelek között kell meghívni. Ez a Perl-ben sincs teljesen másképp, azonban mivel eléggé szabad nyelv, ezeket el is lehet hagyni. Azaz a következő példák teljesen működőképesek és felcserélhetőek, mindenki eldöntheti, hogy melyik a szimpatikusabb számára:

print "Helló Világ!";
print("Helló Világ!");
Ennyi ízelítő után a nyelvből, kezdjük az alapokkal! A következőkben főként nem teljes, működő programokat, hanem csak az adott témához kapcsolódó részleteket fogok bemutatni.

Adattípusok

A következőkben röviden az adattípusokat mutatom be. Az adattípus kifejezés alatt azokat a lehetőségeket értjük, amikkel egy változó értéket le tudunk tárolni. Változóknak lehet adattípusuk, és e szerint tudunk bennük különböző dolgokat eltárolni. Egy változó alatt mindig egy memóriadarabot kell értenünk. Ebben lehet eltárolni, és a későbbiekben felhasználni ’valami’-t. A Perl három fő adattípussal rendelkezik: skalár, skalárok tömbje és asszociatív skalár tömbök - ez utóbbit hash-nek is hívják (más nyelvekben esetleg szótárként találkozhattunk velük). Skalár alatt egy számot, vagy egy szöveget (sztringet) értünk (Perlben nem kell és nem lehet megmondani egy változóról, hogy konkrétan egy számot vagy egy sztringet tárol, szemben a ’típusos’ nyelvekkel – a Perl egy típus nélküli nyelv). Tömbök és hash-ek alatt skalárok egy csoportját értjük. A tömböket számmal indexeljük (számmal hivatkozunk az elemeire), az első elemük a '0' indexű, a többi rendre ’1’, ’2’, ’3’..., a hash-eket pedig skalárral (azaz egy számmal, egy szövegrészlettel, stb.). Tömbök esetén az egyes elemeknek meghatározott sorrendje van (az index-ként használt számok szerint növekvő sorrendben), hash-eknél nincs meghatározott sorrend. A hash-nél azt a skalárt, amellyel hivatkozunk a hash egy elemére, kulcsnak nevezzük, így a hash kulcs-érték párokból felépülő párosokat fog tartalmazni.

A változókra a nevükkel tudunk hivatkozni, ennek első karaktere a hivatkozott típust adja meg. Larry nyelvészi tanulmányai hatással voltak a Perl-re, ez talán itt a legszembetűnőbb. Az egyes változóknál ugyanis megjelenik az egyes szám és többes szám esete. Ha egy konkrét skalárra hivatkozunk, akkor egyes számot kell használnunk, ha több elemre, akkor többes számot. Az egyes szám jele a $, a többes számé a @, vagy a %. A skalár változók mindig $-ral kezdődnek, az egyes szám jelölésének köszönhetően, és ha egy tömb vagy egy hash egy elemére hivatkozunk, akkor is $-t használunk. A teljes tömbre, vagy egy részére való hivatkozást @-al, a hash-eket pedig %-al jelöljük. A változók névrészének egy angol betűvel kell kezdődnie, ezután vegyesen (angol) betűk, egyes jelek (pl. aláhúzás) és számok következhetnek. A változók jelölése tehát a következő:

$napok		# egy egyszerű skalár típus 'napok'
$napok[28]	# a 29. eleme 'napok' tömbnek
$napok{'Feb'}	# a 'Feb'  eleme a 'napok' hash-nek
$#napok		# a 'napok' tömb utolsó indexe

@napok		# a 'napok' tömb összes eleme
@napok[3,4,5]	# a 'napok' tömb egy szelete, ugyanaz, mint a @napok[3..5]
@napok{'a','c'}	# ugyanaz, mint a ($napok{'a'},$napok{'b'})

%napok		# (kulcs1, érték1, kulcs2, érték2...)
Minden típus saját úgynevezett "változótérrel" rendelkezik, ami azt jelenti, hogy nyugodtan használhatunk egy ugyanolyan nevű tömböt, hash-t és skalár változót, a nyelv meg fogja tudni különböztetni őket, amennyiben arra mi is képesek vagyunk.

Értékadás

A cikk záró témájaként az értékadásokról lesz szó. Értéket adni egy változónak az egyenlőségjel segítségével tudunk, a jel bal oldalán egy változónevet, a jobb oldalán pedig egy értéket kell megadnunk. Az érték lehet valamilyen kifejezés (összeadás, szorzás...) is, ezeket a műveleteket a Perl el fogja végezni. Mind itt az egyenlőség mindkét oldalán, mind majd később a műveleti jelek előtt és után lehetséges szóközök, tabulátorok, vagy akár újsorok használata, akár vegyesen is. Pár egyszerű példa (láthatunk megoldásokat tömbök és hash-ek értékadására is):

# skalár
$szoveg1='ez egy szöveg!';
$szoveg2='ez egy másik szöveg!\n';
$szoveg3="ez egy harmadik szöveg!\n";
$szam1=5;
$szam2='11';
$kifejezes=(1+2)/3*4;

# tömb
@tomb=('első elem','második elem','harmadik elem');
$honapok[3]='április';
@tomb[2..4]=('harmadik elem','negyedik elem','ötödik elem');

# hash
%hash1=('1. index','1. elem','2. elem','2. index');
%hash2=('1. index'=>'1. elem','2. elem'=>'2. index');
$hash3{'index1'}='elem1';
A skalár típusú változók értékadását nem magyarázom, remélem érthetőek, talán az utolsóhoz fűznék hozzá egy rövid magyarázatot: láthatjuk, hogy a matematikában megszokott számításokat is elvégezhetjük az értékadások jobb oldalán. Hogy miért nem jobb annál, hogy egyszerűen leírjuk, hogy a ’kifejezes’ változó vegye fel a 0.25 értéket? Azért, mert a későbbiekben láthatóan akár változókat is használhatunk majd a kifejezésünkben.

A tömböknél alapvetően két módszert használhatunk értékadásaink során: vagy egy listát adunk értékül a tömbnek, mint az első példánkban látható, vagy pedig a tömb egy elemére hivatkozva, annak változtathatjuk meg tartalmát. A harmadik példában a tömb egy tartományának történő értékadásra láthatunk egy példát. A @ jelet használtuk, mivel a jobb oldalon egy lista szerepel, tehát többes számról van szó.

Végül tekintsük át a hash-hez való értékrendelés módszereit. Mint láthatjuk, nagyon hasonlít a tömbhöz, itt is adhatunk egy listát is értékül, vagy egy skalárt. Az első példát megtekintve láthatjuk, hogy amennyiben listát adunk értékül, akkor index-érték párokat kell szerepeltetni a listában. A második példában látható módon ezeket a párokat az => segítségével is megadhatjuk, ezzel növelve a program áttekinthetőségét.

Egy változóhoz természetesen hozzárendelhetjük egy másik változó, vagy akár több változó értékét is. A következő példákban erre, illetve a tömbök, hash-ek elemeire való hivatkozásokra mutatok példákat:

# skalár
$valt1=$valt2;
$marcius=$honapoktomb[2]; # 0-január, 1-február, 2-március...
$junius=$honapokhash{'június'};
$hossz=@honapok; # a honapok tomb elemeinek a szama
$tavasz=@honapok[2,3,4]; # $tavasz='márciusáprilismájus';

# tömb
@honapok=(@tavasz,@nyar,@osz,'december',$januar,'február');
@tomb=($hash{'elso'},$hash{'masodik'});
@fordit[0,1]=@fordit[1,0];
($valt1,$valt2)=($valt2,$valt1);

# hash
%hash=('január'=>$honapok[0], 'február'=>$honapok[1]);
A fenti példák szinte teljesen megegyeznek az előzőekban tárgyaltakkal. Nézzük meg azonban a negyedik skalár példát. Itt azt láthatjuk, hogy egy skalárnak egyszerűen egy tömböt adunk értékül. Itt megint, egy az emberi nyelvekben is megtalálható jelenséget látunk: egyes dolgok más és más környezetben másképp viselkednek. Itt, ha úgy hivatkozunk egy tömbre, mint egy skalár változóra, akkor skalár változóként is viselkedik, az értéke pedig a tömb elemeinek száma lesz. Nézzük meg a tömböknél szereplő harmadik példát. Itt azt láthatjuk, hogy hogyan tudjuk egy tömb két tetszőleges elemét külső változó segítsége nélkül megcserélni. Ez a példa is a nyelv rugalmasságát mutatja, kevés nyelv van, amelyben ez megvalósítható, annak ellenére, hogy sok esetben hasznos funkció. Végül a tömbökhöz sorolt utolsó példára hívnám fel a figyelmet: a példában megcseréljük a két változó értékét egy harmadik változó nélkül.

Az értékadások végéhez közeledünk, de még nem beszéltünk az értékadások ellentett műveletéről, mikor fel akarunk szabadítani egy változót, mert például szükségünk van az általa foglalt memóriára, vagy éppen azt szeretnénk, ha semmilyen értéke nem lenne. Általában ha rövid, kevés memóriát igénylő programot írunk, akkor erre a lépésre nincs is szükség, hiszen a Perl értelmező a program futásának végén felszabadítja az összes változót. Ellenkező esetekben azonban két 'utasítás' áll rendelkezésünkre, ebből tekintsük meg az alapeseteket az elsőre, az undef-re:

undef $skalar;
undef @tomb;
undef %hash;
A tömbök és a hash-ek egyes elemeit is felszabadíthatjuk a fenti módszerrel:

undef $tomb[5];
undef $hash{'hatodik'};
Első ránézése tisztának tűnik a dolog? Vizsgáljuk meg közelebbről, hogy mi is történt a második esetben a hash-nél, mert itt bizony hibásan jártunk el (pontosabban nem azt végzi el a program, amire első ránézésre gondolunk)! Valójában ekkor csak a 'hatodik' indexű elemhez hozzárendelt változó értékét szabadítjuk fel, a hozzárendelés továbbra is megmarad, csak éppen a $hash{'hatodik'} értéke ezentúl nem definiált. Ez a más programnyelvekben használatos NULL értékhez hasonlít. Mit tehetünk ha ezt a hozzárendelést is meg szeretnénk szüntetni? Természetesen erre is van megoldás, erre szolgál a delete:

delete $hash{'hatodik'};

Összefoglalás

A mai cikk során elég sokmindennel megismerkedtünk a Perl-ből, valószínűleg így elsőre egy kicsit tömény volt a dolog. Ez nem baj, olvasgassuk át gyakran a megfelelő részeket, megint van (legalább) két hetünk az emésztésre. Bár ebben a cikkben még egy konkrét, valamire is használható programot nem írtunk, de az első nagy lépést megtettük efelé. A következő cikkben ígérem, már egy kis, a "Helló Világ!" szintjén túlmutató programot is át fogunk nézni.
 
Bártházi András arcképe
Bártházi András
Az Emarsys-nál dolgozik vezető fejlesztőként, és az API-ért, integrációkért felelős termékmenedzserként. Szeret profi csapatban profit alkotni.
1

Perl distrib Windows-ra...

kgyt · 2004. Júl. 27. (K), 11.09
Azért volt az ActiveState disztribjén túl is élet...
Pl.: Gurusamy Sarathy verziója 1997-ből (5.004_02).
Egyébként ezt használtam régebben, mert a GD ebben alapértelmezetten jól ment, ellenben az ActivePerl nem mindig szerette...

Letölthető a CPAN-ról... (readme fájl)

CPAN / Portok / win32

--
Szeretettel: Károly György Tamás
kgyt##kukac##kgyt.hu - http://kgyt.hu
2

Köszi a kiegészítést!

Bártházi András · 2004. Júl. 27. (K), 11.22
Köszi a kiegészítést, ezt a disztribúciót nem ismertem (anno mindenki kivétel nélkül az ActivePerl-t ajánlotta :). Én ImageMagick-et használtam, és az jó volt hozzá.

A CPAN portok oldalán egyébként szó esik Perl-es editorokról is, akinek nem jönnek be az általam ajánlottak, itt keresgélhet oprendszer szerint.

-boogie-
3

Perl ablak nem marad nyitva Winxp sp2

Szelev71 · 2005. Dec. 2. (P), 10.34
Sziasztok!
Nagy örömmel olvasom a leírást a perl-ről KGYT javaslata szerint, az akádálymentesítés irányában. Sajnos egyszerű érdeklődő lévén valamit mindig elronthatok, mert a perl ablak mindig csak egy pillanatra jelenik meg, ha parancssorból (Win/start/futtatás) vagy wincommander parancssor, akár winintéző ráklikk, programot kiválaszt megoldást próbálom.

Keresgéltem a kérdésre, de úgy tűnik, ezt mindenki megoldotta csont nélkül.
Tudnátok erre a bénázásra valami megoldást? Talán a windowson kellene valamit állítani?

Köszi,
Szelev71
4

amíg le nem fut a szkript

Anonymous · 2005. Dec. 2. (P), 10.45
Addig marad nyitva az ablak, amíg le nem fut a szkript. Ha azt akarod, hogy ne záródjon be, indíts egy parancs ablakot, és onnan futtasd, vagy írj a programodba egy billentyű bekérést a végére, hogy ne fusson le azonnal.
5

Köszönöm

Anonymous · 2005. Dec. 2. (P), 11.12
Köszi, sikerült! :-)))))

parancssorba beírtam, hogy command <enter> és marad az ablak, és innen már tudom futtatni a perlt.
Köszi
még1x
Szelev71