ugrás a tartalomhoz

Perl alapjai I. - A múlt és a jövő

Bártházi András · 2004. Júl. 6. (K), 22.00
Perl alapjai I. - A múlt és a jövő
A saját oldalamon olvasható szakdolgozatomat jelentősen felfrissítve, egy új cikksorozatot indítunk ma útnak, mely a hazánkban nem túl ismert (félreismert) Perl programozási nyelv alapjaiba nyújt betekintést, azzal a céllal, hogy azok is kedvet kaphassanak hozzá, akik eddig még nem találkoztak vele közelebbről. Első alkalommal a nyelv történetével és jövőjével ismerkedünk meg.

A Perl nyelv az egyik legrugalmasabb, és az emberi nyelvekre talán legjobban hasonlító programozási nyelv, melyet ismerek. Sokan talán pont emiatt elrettennek a használatától, pedig ha megismerkednek vele, bizony egy nagyon jó eszközt vesznek fel eszköztárukba - sokszor lehet szükség egy olyan script nyelv használatára, mely nem csak webes oldalon, hanem parancssorban is nagyon jól használható.

Történelem

A Perl egy elég öreg nyelvnek számít (kb. 1987 óta létezik!). Persze ettől még nem lenne egyedülálló, hiszen manapság a legtöbb számítógépes nyelv is jelentős múltra tekint vissza, vagy ha új nyelvként jelent is meg mostanában, több nyelv is áll mögötte elődként, több nyelv elemeiből, tapasztalataiból és megoldásaiból építkezik. Kialakulásuk során egyre finomodtak, vettek át ötleteket egymástól, építettek be újabb és újabb nyelvi technológiákat magukba. Mára elmondható, hogy általában ezek a (modernebb) nyelvek már nem abban különböznek, hogy mire képesek, milyen programozási lehetőségeink vannak használatuk során, sokkal inkább abban, hogy milyen könnyen valósíthatóak meg bennük az egyes megoldások, milyen támogatottság, milyen rutinkönyvtárak állnak rendelkezésre.

Ebből a szempontból a Perl egy nagyon előkelő helyen szerepel, jelentős programozói bázisa van, és nagyon sok modul, mások által már megírt programkód szerezhető be, tölthető le hozzá (pl.: http://www.cpan.org). A Perl a szememben (és talán nem csak az enyémben) egy kivételt is képez, hiszen olyan megoldásokat használhatunk benne, melyek bizony nem számítanak általános programozási fogásoknak. Ez abból adódik, hogy tervezője nyelvész múlttal rendelkezik, így számos az emberi nyelvben használatos megoldás lett bevezetve, számos az egyértelműségre és a szövegkörnyezetre vonatkozó kivétellel.
Álljon itt az egyik kedvenc példám a nyelv kivételes képességeit bemutatandó: extra változó használata, illetve külön függvény vagy eljárás nélkül tudjuk megcserélni két változó tartalmát az alábbi egyszerű szintakszist használva:

($valtozo1,$valtozo2)=($valtozo2,$valtozo1);
Bár erre lehet mondani, hogy nem egy nagy dolog, hasonlóképpen akár más nyelvekben is megoldható, vagy írhatunk rá külön eljárást, de az mégsem ugyanaz. Itt egy közel triviális megoldást láthatunk, egy triviális és hétköznapi problémára. És a Perl erről szól.

A PERL betűszó jelentése: Practical Extraction and Report Language (kivonatok és jelentések készítésére szolgáló nyelv). Ez a név onnan jön, hogy a kialakításakor a kezdetekben főleg szövegfájlok (Linux alatt különböző rendszerfájlok, eseménynapló, stb.) gyors és egyszerű feldolgozásának megkönnyítése volt a cél. Ez azonban csak a nyelv indulásakor volt igaz, köszönhetően népszerűségének, manapság sokkal szélesebb körben lehet használni weblapok készítésétől speciális megoldásokon keresztül kisebb-nagyobb alkalmazások írásáig. Perlben írhatunk rövid (de akár nagyon összetett) egy soros programokat, komplett weblapokat, asztali, grafikus felületű alkalmazásokat, egyszerű és bonyolultabb (web-, kereső-, levelező-, levelezőlista-, stb.) szervereket, és még ezer dolgot. És nem csak írhatunk, hanem nagyon sokan írtak is rengeteg programot benne - a hazai megítéléshez képest külföldön sokkal népszerűbb ez a nyelv.

A Perl filozófiája, hogy az egyszerű problémák egyszerűen megoldhatóak legyenek, anélkül hogy lehetetlenné tenné összetett programok írását. Egy adott problémát sokféleképpen oldhatunk meg tudásunktól, felkészültségünktől függően. Erre a Perles közösség ma is büszke, nagyon gyorsan, nagyon látványos programokat lehet írni Perlben. A Perl két "hivatalos" szlogenje: "There's more than one way to do it" (TMTOWTDI - 'Tim Toady'-nak ejtendő), azaz "Több úton is megteheted", míg a másik "Perl: the Swiss Army Chainsaw of Programming Languages", azaz "Perl: a programozási nyelvek svájcibicskája". A nyelv hangulatára jellemző, hogy nevének magyarázatára ismert egy másik kifejezés is: Pathologically Eclectic and Rubbish Lister, azaz betegesen túldíszített szemétlistázó - mindenki döntse el a következőkből, hogy melyik fedi jobban a nyelv lehetőségeit!

Hogy teljes legyen a kép, íme még egy idézet Larry Wall-tól, a nyelv atyjától: "... gyakran viccelünk azzal, hogy a teve az egy bizottság által (félre)tervezett ló valójában, de ha jobban belegondolsz, a teve egész jól alkalmazkodott a sivatagi élethez. A teve úgy fejlődött, hogy közel önellátó legyen. A dolgot egy másik oldaláról megvizsgálva, a teve nem úgy fejlődött, hogy jó legyen a szaga. A Perl sem."

Juszuf, a Fővárosi Állat- és Növénykert egyik tevéje

A nyelv erősségei

Gyors fejlesztés: A Perl félig interpreteres nyelv (ami azt jelenti, hogy nem kell fordítanunk, magát a forráskódot futtatjuk, s nem először egy fordítóprogramot használunk, majd a végrehajtható, már gépi kódot futtatjuk), ezért nem igényel fordítást, egyből futtatható a forráskód. Beépített lehetőségeivel egyszerű a hibakeresés. A Perl-nél ráadásul egy "csalással" is szembetaláljuk magunkat, ha egy kicsit megvizsgáljuk a futtatás folyamatát: induláskor a futtató környezet félig feldolgozza a forráskódot, ennek eredményeképpen egy gépi kódhoz közeli nyelven lesz elérhető a program, így a Perl interpreteres volta nem válik egyben hátránnyá is. Ez a működés különben nagyon hasonlít mind a Java, mind a .NET környezetekhez, melyekhez hasonlóan itt is egy virtuális gép futtatja programunkat.

Lehetőségek: Telepítése után a reguláris kifejezései segítségével a szövegfeldolgozás mindennél egyszerűbb, továbbá objektumorientált, adatbázis-kezelő és hálózati programozási lehetőségek széles tárháza áll rendelkezésünkre, az Internetről letölthető modulok segítségével pedig semmi sem szab határt a nyelv lehetőségeinek.

Tanulhatóság: A Perl alapjai nagyon egyszerűek, fokozatosan tanulható nyelv. Egy adott feladatra szinte mindig többféle megoldási lehetőséget ad, lehetőséget nyújtva a kezdőnek hogy egyszerűen, a haladónak, hogy elegánsan oldja meg a problémát.

Hordozhatóság: Minden elterjedt platformon futtatható. Könnyen kialakítható egy olyan fejlesztői környezet, melyben a fejlesztés Windows környezetben zajlik, a program azonban végül Unix környezetben fog fut - s ehhez akár semmilyen módosítás nem szükséges a forrásban (persze megfelelő körültekintéssel kell eljárni, és nem tartalmazhat operációs rendszer függő részeket a program).

Ár: Ingyenes. Segítséget is gyorsan és szintén ingyen kaphatunk, ha valakit megkérdezünk egy levelezőlistán, s általában még jobbat is, mintha fizetnénk érte.

Sebesség: Gyors. Vagy nem. Ez a tulajdonsága természetesen attól függ, hogy mivel hasonlítjuk össze. Elmondható, hogy egy hosszabb programot is pillanatok alatt fel tud dolgozni a futtató környezet, gyorsan képes elindulni a programunk, majd pedig gyors feldolgozásra képes. Web programozás esetén lehetőségünk van a CGI-től eltérő futtatásra, mely jelentős gyorsulást eredményezhet. Adott esetben speciális beépített és nagyon jól optimalizált nyelvi elemeinek (reguláris kifejezések, beépített gyorsrendezés) akár egy bináris programnál is gyorsabb működésre képes. Persze egy gépi kódban megírt, Hello World! mindig gyorsabb lesz, mint ha Perl-ben írnánk. A nyelv erre is megoldást nyújt azonban: könnyen készíthetőek hozzá modulok például C nyelven írva, melyeket utána könnyedén használhatunk fel. Emelett persze - ha objektíven szeretnénk maradni - elmondható az is, hogy lassú a nyelv, természetesen mindig a feladattól függ, hogy milyen hatékonysággal oldható meg Perl-ben. Ne írjunk benne operációs rendszert.

A nyelv kialakulása, fejlesztése

A nyelv fejlesztését Larry Wall kezdte meg 1987 környékén, az első kiadás ezen év decemberében látott napvilágot. Az 1987-es indulás következtében igen jelentős múltra tekint vissza, ma már nagyon sok önkéntes is fejleszti. Röviden összefoglalva: Larry nagyot alkotott. Ha más nagy programozókhoz szeretnénk hasonlítani a teljesítményét, akkor talán Ken Thompson (a UNIX rendszer megalkotója), vagy Dennis Ritchie (a C programozási nyelv létrehozója) neve jöhet szóba. A scripting nyelvek között a Perl népszerűsége a C-vel hasonlítható össze.

Kezdetben a nyelvet feleségéről Gloria-nak nevezte el, a későbbiekben - a történet szerint - mivel ez feszültségek forrása lehetett volna ("Már megint milyen béna ez a Gloria!"), más név után nézett. Először a PEARL (magyarul: gyöngy) merült fel benne mint lehetőség (ahol az eredeti angol jelentésében a rövidítésnek az And szót jelenti az A betű), azonban mivel már volt ilyen néven egy grafikus programnyelv, ezért maradt a Perl rövidítés.

A második verzió hozta magával a reguláris kifejezések használatát, a hármas verziótól képes a program bináris állományok kezelésére. A négyes verziószámnak külön története van: az első, az O'Reilly kiadó (talán nem kell bemutatni) által megjelenített 'tevés' Perl könyv megjelenésére való tekintettel adták ki (mely könyvet mellesleg Larry írt). Azóta a teve a Perl elválaszthatatlan része, a nyelv kabalaállata.

A jelenlegi széles körben használt változat a Perl 5, melynek első változata még 1994 októberében jelent meg. A 4-es verzió tulajdonságait megtartva teljesen újraírták, modularizálták, optimalizálták és kijavították a hibáit, továbbá kiegészítették objektum-orientált nyelvi lehetőségekkel. A nyelv maga ennek ellenére nem sokat változott, az újdonságok kivételével szinte kivétel nélkül megegyezik az előző verzióval. A továbbiakban ennek a változatnak a lehetőségeit kívánom majd bemutatni, hiszen ez az a verzió, amihez ma hozzá lehet jutni, ezt tartalmazzák a különböző Linux verziók is.

A történethez hozzátartozik még, hogy ennek a verziónak is vannak alverziói is, melyek napjainkban is folyamatosan jelennek meg. A jelenlegi, jelen cikk írásakor legfrissebb a Perl 5.8.4-es (vagy Perl 5.008004-es). Ez a verzió főként a Unicode támogatásáról híres.

Az 5-ös széria folyamatos fejlesztése mellett, 2000 nyarán, a negyedik Perl konferencián jelentette be Larry a 6-os széria fejlesztésének kezdetét, pontosabban azt, hogy úgy gondolja, itt lenne az ideje a nyelv teljes megújításának. Ez nem csak a nyelv újabb dolgokkal való kiegészítését hozza magával, hanem egy teljes újragondolás után az alapjaiból építi fel a nyelvet. A Perl 6 teljesen más lesz, és mégis nagyon hasonló a Perl korábbi verzióihoz képest. Szét lesz választva a fordítás a futtatástól, egy új, egész, az eddigi Perlekhez képest még jobban megtervezett nyelv lesz a végeredmény. A Perl legújabb verziója olyan újdonságokat fog kínálni, melyek forradalminak számítanak, és elmondható, hogy megjelenésekor a többi nyelv nagyságrendekkel le lesz maradva mögötte.

A futtató résznek, avagy a virtuális gépnek már megvan a neve is: Parrotnek (magyarul: papagájnak) hívják. A Parrot a Perl mellett képes lesz (pontosabban már ma is képes) más nyelveken megírt programokat is futtatni, ha a megfelelő fordító elkészül hozzájuk. Jelenleg már elérhető a Parrot-nak egy kezdetleges változata (jelenleg a 0.1.0-s "Leaping Kakapo"), és több fordító is hozzá (BASIC, Befunge, Brainf*ck, Cola, Forth, Jako, Ook!, Perl 6, Python, Ruby, Scheme, TCL, URM).

A témáról könyvet is lehetne írni, pontosabban ezt már meg is tették, elkészült az első könyv is a témában. Ezen kívül meglepően hosszú és részletes esszéket olvashatunk a tervezésről egymásra épülő apokalipszisek, szövegértelmezések, és összegzések formájában. Ha nyelvet szeretnénk tervezni, akkor is hasznos olvasmány lehet, sok-sok tanulsággal, és meglepő ötletekkel.

A nyelv fejlődése és népszerűsége elsősorban három dolognak köszönhető. Az első, és talán legfontosabb, hogy Larry úgy gondolta, hogy ingyenessé és szabad forrásúvá teszi. Ez neki nem jelentett külön munkát, mivel egyszer már saját magának kifejlesztette, ellenben nagyon sok embernek egy rugalmas nyelvet tett elérhetővé, mely nagyon sokféle számítógépes környezetben használható. A másik dolog, hogy figyelembe vette sok ember kérését, ötletét a nyelv fejlesztése közben, így egy széles kört kielégítő nyelv lett a végeredmény. Végül a harmadik, mely az elterjedtséget okozta, hogy kiengedte a napi fejlesztést a kezéből. (Nem is olyan meglepő módon, ez nagyon hasonlít a Linux fejlődéséhez).

A nyelv magját napjainkban a Perl Porters néven ismert csoport fejleszti, a fő irányvonalat, kérdéseket viszont továbbra is Larry határozza meg. Ők fejlesztik az új verziót is.

A következő cikkekben a Perl nyelvi lehetőségeit vesszük át, megismerkedve mindazon tulajdonságokkal, melyek napjaink egyik legnépszerűbb nyelvévé teszik.
 
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

Kivancsian varom a folytatast

Anonymous · 2004. Júl. 7. (Sze), 08.22
Kivancsian varom a folytatast...... :)
2

Szia! [i]A Perl legújabb

Hodicska Gergely · 2004. Júl. 7. (Sze), 12.39
Szia!

A Perl legújabb verziója olyan újdonságokat fog kínálni, melyek forradalminak számítanak, és elmondható, hogy megjelenésekor a többi nyelv nagyságrendekkel le lesz maradva mögötte.
Ezt mit fed? Nem birom kivarni a Perl alapjai 9-et. ;)

"There's more than one way to do it"
Mint a nyelvet (meg) csak igen feluletesen ismero, ugy tunik, hogy tulsagosan is sok fele ut van. Meg a "jaratosabbak" szamara is akad egy csomo meglepetes. A nagyon hardcore (elvetemult:)) megoldasok gyorsabbak legalabb, mint az atlathatobbak?
Tobb helyen is olvastam mar olyat amugy, hogy egy nagyobb projekt eseten a valasztas pont emiatt a "tul sok" ut miatt kerulte el a PERL-t, mert nagyon nehez lett volna egyseges kodolasi stilust kialakitani benne.

Felho
3

Perl 6

Bártházi András · 2004. Júl. 7. (Sze), 13.33
A Perl alapjai sorozat keretében nem lesz szó a Perl 6-ról többet. Talán lesz egy (ha lesz rá igény) Perl 6 alapjai is. ;)

Nagyon durva dolgok lesznek benne. A reguláris/mintaillesztő kifejezéseket megújítják, helyettük rule-ok/szabályok lesznek. Szerintem nagyon jól sikerült a megújítás során megfogniuk vele a mintaillesztés lényegét. Nagyon gyorsan össze lehet rakni vele egy nyelvi, vagy egy log parsert vele. Az alapok persze maradnak.

A Perl eljáráskezelését megújítják egy "kicsit", eddig nem volt egy túl bonyolult dolog. Többek között ezentúl lehetőség lesz cím szerinti, de nem változtatható, cím szerinti változtatható paraméterek, illetve másolatot készítő paraméter átadására. A változó számú paraméterezést is nagyon jól támogatja majd, lehet opcionális paramétereket definiálni, lehet név szerint átadni paramétereket. Egy metódus deklarációjánál megadható lesz, hogy a kapott paramétert egyből az objektum tulajdonságává tegye. Lesznek multi-metódusok, azaz a meghívott paraméter típusától függően más kódot tudsz végrehajtani.

Olyan triviális dolgokat, mint a többszörös összehasonlítás, simán lekezel majd:

if (5 < $a < 10) { print "5 és 10 között van a szám"; }
Ez ráadásul nem csak azt jelenti, hogy átláthatóbb, hanem azt is, hogy optimalizálható, és a $a-t csak egyszer kell kiértékelni.

Bevezetik a típusokat, mint opcionális lehetőséget. Ez nem arra kell, hogy akkor ezentúl típusosan kelljen programozni, hanem egy lehetőség lesz, hogy optimálisabb programot írhass, vagy külső rutinkönyvtárakat könnyebben illeszthess.

Lesz egy új intelligens (valami értelmesebb neve van, de nem jut eszembe) operátor, ami a két oldalán álló elemek típusától függően tudja összehasonlítani őket. Például:

if ( $a ~~ @b ) { ... }
Ez a kifejezés akkor igaz, ha a $a szerepel a @b tömbben. Ehhez kapcsolódik egy új switch szerű lehetőség is:

given $a {
  when 1    { print "1!"; }
  when /\w/ { print "betűt tartalmaz"; }
  when @z   { print "benne van a \@z tömbben"; }
}
És még ezer és egy apróság. Ez részben más, már régóta hiányzó dolgok megvalósítása, nagyrészt viszont újdonságok, illetve az eddigi és újonnan implementált dolgok teljes újragondolása és még logikusabb megvalósítása.

Lesz még teljes objektum-kezelés is. Kb. a Perl 6-nál kezdem elhinni, hogy az adminisztratív programozástechnikán felül, vagyis hogy nem csak azért rakom objektumba, hogy el legyen választva és ezáltal áttekinthetőbb, modulárisabb, csomagolhatóbb legyen, jó még másra is az objektum orientált programozás. Sokkal kevesebb "feleslegesen kreált díszítést" fognak tartalmazni ezek az objektumok.

Még folytathatnám. :) Olvasd el az Apokalipsziseket, elég jól le van írva olvasmányos formában a dolog. Több száz oldalas anyag. :)

-boogie-
6

Szia! A fuggvenyekkel kapc

Hodicska Gergely · 2004. Júl. 7. (Sze), 14.57
Szia!

A fuggvenyekkel kapcsolatos ujitasok azert mar eleg regota meg vannak mas nyelvekben (konstans referencia parameter, function overloading).

Persze bizonyos ujitasok tenyleg ujitasok lesznek. Alapvetoen nekem eleve tetszik a PERL (meg csak igy a felszint ismerve is), mert tenyleg jo tomoren lehet benne fogalmazni, es peldaul ezek az ujitasok is abszolut jol hasznlhatoak, raadasul tenyleg gyakorlatias dolgok.

Még folytathatnám. :) Olvasd el az Apokalipsziseket, elég jól le van írva olvasmányos formában a dolog. Több száz oldalas anyag. :)
Fu, mar igy is annyi dolog van a queueban, szerintem sos fogok a vegere erni ;) Majd egyszer ezek is sorra kerulnek.

Felho
7

Függvények

Bártházi András · 2004. Júl. 7. (Sze), 15.53
A Perlben már most is meg lehet oldani ezeket amúgy, tehát ebből a szempontból nem újdonság. Maga a megoldás az új, illetve én azt hiszem, hogy eddig még nem hallottam egy nyelv esetén se név szerinti paraméterátadásról (amikor egy paraméternév -> érték formában adod át a paramétert). Persze ezt meg lehet úgy oldani, hogy egy hash-t ad át az ember. És ezek tényleg csak a kulcspontok, nagyon sok apróság van itt is még, amit egyelőre nem sikerült felfognom, illetve nem tartok még ott az ismerkedésben. :)

Én folyamatosan rágom át magam a doksiján, illetve már letöltöttem a legfrissebb Parrot verziót, és próbálgattam benne az újdonságokat. :) De nekem sincs sok időm.

A virtuális motoros megoldás előnyeiről, mint a byte-code közzététele (és a forrásod védelme), a byte-code gyorsítótárazása, stb. még nem is beszéltem persze. Készül külön optimalizáló, stb.

-boogie-
9

"eddig még nem hallottam ...

gerzson · 2004. Júl. 10. (Szo), 09.46
eddig még nem hallottam egy nyelv esetén se név szerinti paraméterátadásról


Python. A pontos szintaktikákat most nem tudom összehasonlítani.
10

Python

Bártházi András · 2004. Júl. 10. (Szo), 10.55
Nos, akkor most már hallottam... :) Azt azért leszögezhetjük, hogy nem általános dologról van szó azt hiszem. :) Összehasonlítani sajnos én sem tudom nagyon, mert a Python nagyon messze áll tőlem (szintaktikájában), nem nagyon tudtam még foglalkozni vele.

-boogie-
14

Python is cool

gerzson · 2004. Júl. 10. (Szo), 19.16
A Python jó dolog, és érdemes foglalkozni vele.
A "nevesített paraméterátadás" szintaktikája a Keyword arguments címszó alatt olvasható.

A weblaboron is megjelent hír a Scriptometer oldalról, ahol különböző shell-ként is használható nyelveket hasonlítanak össze. Ebben igen jól szerepelt a Python -- és ami ugyanilyen fontos -- tiszta és átlátható kódokkal.
11

Re: Név szerint paraméterátadás

T.G · 2004. Júl. 10. (Szo), 12.25
Szerintem a név szerinti paraméterátadás más.
pl. az ALGOL 60-ban volt még ilyen. az alprogram végrehajtása során a paraméter kiértékelése mindig újra megtörténik, mikor hivatkozunk rá.
procedure pl(szam) {
print(szam);
k++;
print(szam);
}
pl(i+j[k]);
Név szerinti paraméterátadás esetén nem ugyanazt írja ki, mert mikor a szam-ra hívatkozunk, újra kiértékeli i, j, k -t...

Paraméterek megadására két féle lehetőség van, pozicionális formában (ez ami mindenhol van) és névvel jelölt formában (ez a név=>érték), illetve lehet keverni. Az Adaban is van ilyen.

Bocs, csak elte progmaton vagyok... ott ilyeneket meg kellett tanulni. :)
12

Ááá, nem.

Bártházi András · 2004. Júl. 10. (Szo), 13.58
Azt hiszem, hogy nem a jó fogalmakat használom, vagy legalábbis félreérthető voltam. A Perl 6 ezt fogja tudni:

sub pelda( $a, $b, $c ) {
  print "$a, $b, $c\n";
}


És ezt lehet meghívni így:

pelda('egy', 'ketto', 'harom');


Vagy, és ez a név szerinti átadás, legalábbis amiről beszéltem:

pelda( c=>'harom', b=>'ketto', c=>'egy');


Persze lehet keverni a név szerintit, hely szerintit, variábilist (bekerül egy tömbbe vagy egy hash-be a maradék paramétersor), stb. Ez csak egy bugyuta példa volt. :)

És ezen kívül van még lehetőség érték szerinti és cím szerinti átadásra, illetve ez utóbbinál csak olvashatóra beállítani egy változót. Egy paraméternél megadhatod azt is, hogy kötelező, vagy feltételes, megadhatod a típusát, az eljárásból megnézheted, hogy milyen környezetből hívták meg (mondjuk tömböt, sztringet, vagy számot vár-e vissza a hívó), és aszerint járhatsz el.

Van négy fajta eljárás definíció (sima eljárás, metódus, szubmetódus, mutli eljárást), illetve van makrózási lehetőség, amivel a nyelv lehetőségeit tudod kibővíteni.

Vagy egyről beszéltünk?

-boogie-
13

Nem akartam a szavakon lovagolni...

T.G · 2004. Júl. 10. (Szo), 16.14
Bocsi. Nem akartam ám nagyon a szavakon lovagolni, csak ez kikivánkozott. :)
Ezt hívják névvel jelölt formának. :)
(névvel jelölt formában adjuk meg a paramétereket, és nem név szerint adjuk át a paramétereket)
4

Nem átlátható kód

Bártházi András · 2004. Júl. 7. (Sze), 13.43
Ez - részben és főként - nem igaz, csak egy legenda. Bármilyen nyelven lehet jól és rosszul is programozni. Ha olyan alapvető dolgokat betartasz, mint a modularitás, értelmes elnevezés, struktúrált forráskód, stb., akkor ezek nem igazak.

Készítettem egy portál keretrendszert. Maga a kódom szinte csak függvényhívásokból áll, amiknek beszédes nevük van. Ha azt nem tudja megérteni valaki, akkor az programozni nem tud. :) A függvények kódjában persze tömény Perl kód található, de amellett, hogy nem kell ehhez túl gyakran hozzányúlni, az összetett részek fel vannak kommentezve, és átláthatóak maradnak.

A hardcore megoldások alatt érthetjük az átláthatatlan kódot, illetve érhetjük a valóban ügyes kódot is. :) Nem mindig az a lényeg, hogy gyorsabb legyen, lehet, hogy a feladat az az, hogy minél gyorsabban meglegyen. Utána meg lehet refaktotinggal gyorsítani. Perlben az a jó, hogy lehet tömör, lehet gyors, lehet gyorsan készülő kódot írni, és nem zárják ki egyik kombinációban sem egymást.

Vannak szép hack-ek benne, melyek nagyon gyorsak tudnak lenni, de sok memóriát zabálnak. Vannak, amik minimális memóriát, viszont lassabbak. Ha valamit mintaillesztő kifejezés miatt nem értesz, az általában gyorsabb, mint ha te írnád meg pl. ciklusokkal azt a rutint.

Szóval vagy rosszul döntöttek, vagy nem voltak jó (Perl) programozóik. ;)

-boogie-
5

Szia! Talan nem voltam ele

Hodicska Gergely · 2004. Júl. 7. (Sze), 14.47
Szia!

Talan nem voltam eleg pontos. Nem feltetlenul a nehezen olvashatosagra gondolok. Minden nyelvnek megvannak a sajat fogasai, amiket nem gond ha alkalmazol, mert egy masik szinten a nyelvben jaratos meg fog erteni, mert ez a nyelvre jellemzo.
Csak nekem ugy tunik, hogy a PERL-ben "tul sok" ilyen van. Csak mivel nem ismerem jol a PERL-t igy nem tudom eldonteni, hogy ezek mennyiben indokoltak (valamilyen szempontbol tenyleg mas megkozelitesu megoldas), es mennyiben csak lehetosegek, melyeket ki igy-ugy hasznal.
Igy most nekem ugy tunik, hogy meg szepen programozni is sok fele keppen lehet PERL-ben.

Szóval vagy rosszul döntöttek, vagy nem voltak jó (Perl) programozóik. ;)
Yahoo atalakitasarol szolo cikkben is volt. Nem hiszem, hogy ne lett volna ott egy hozzaerto ember.

Felho
8

Mindig a projekt dönt...

Bártházi András · 2004. Júl. 7. (Sze), 16.07
Hát, én csak a saját meglátásaimat tudom elmondani. :) De.

Szerintem egy PEAR-hez hasonló belső policy a kód kinézetére könnyen kialakítható. Ezután egy normális programozónak simán kell tudnia átlátható kódot készítenie. Olyan húdesok vezérlési lehetősége például nincs a Perl-nek, stb. Nem hiszem, hogy nagyon-nagy különbség lenne egy Perl és egy PHP projekt esetén ebből a szempontból. És persze nem KELL mindent használni, csak LEHET. Tehát ha egy kevesebb lehetőséget kínáló nyelvet választanak, ahelyett lehet egy belső policy-t is kitalálni, hogy mit használhat a nyelvből, és mit nem...

Ami a Yahoo-t illeti, nem ismerem kontextust, hogy pontosan miről döntöttek. Ettől függetlenül ott egy webes projektről volt szó, aminél a PHP-nek azért vannak nyelvi előnyei. A keretrendszerem ezeket igazából kiküszöböli, így igazán nem látok hátrányokat ebből a szempontból sem, de ez egy személyes dolog. Szóval a PHP egy webes környezetben lehet előnyösebb. A Perl viszont nem csak a webről szól. :)

-boogie-
15

már elegem van ebből a tudatlanságból

Anonymous · 2004. Aug. 24. (K), 23.02
Már a 28. könyvet böngészem, és órák óta rágom a netet de még mindig nem akar működni a dolog. Egy egyszerű (nektek egyszerű) számlálót (később mást is) akarok feltenni a honlapomra, de nem akar működni. Valaki fel tudna világosítani lépésről lépésre (klikkről-klikkre), hogy mit kell csinálnom? Van egy fájlom, ami
#!/usr/bin/perl -w
sorral kezdődik.
Ennek a fájlnak milyen nevet és milyen kiterjesztést adjak?
Ezt a fájlt a webhelyem melyik részébe kell tennem? (Van cgi-bin könyvtár!!! - ezt tudom, tehát a szolgáltató engedne ilyen dolgot) (alkönyvtár, pontos név)
Ezután van egy html-em, ami kiértékel. Ennek a tartalmát (gondolom) beaplikálhatom bármelyik oldalam bármelyik részébe. Erre még én is képes vagyok. A szükséges változók és fájlnevek módosításához azért értek.
Ezután nem működik a számláló: te a . felhasználó vagy. Ilyet ír ki. Tehát nem értékel ki. Ilyenkor mit kell tenni? Valami parancsot kell futtatni konzolban, hogy a szerver felébredjen? Erre semelyik könyv nem tér ki!!! Vagy valami mást kell csinálni?
Fontos! Nem akarok programozni. Tehát a programot készen, egészben kapom, pl. floppyn. Ezután szeretném felrakni a netre és szórabírni. Annyit tudok, hogy http protokollon keresztül nem elérhetőek a cgi-bin könyvtárak, ezért az ottani beállításokat nem tudom kielemezni, ellenkezőleg a webhely többi részétől.
Ha valaki tudna segíteni, kérem ide (is) írjon:
ffishy##kukac##freemail.hu
Köszi
16

Linux alatt *.pl futtatás probéma

primatus · 2014. Feb. 6. (Cs), 10.22
Kedves András!

Kezdő vagyok a programozásban és utat keresek egy használható, érthető programnyelvhez. Amit a Perl-ről írtál, az egyrészt nekem tetszik (pl. platform függetlenség, ingyenesség, érthetőség), másrészt köszönöm! Sokat foglalkoztál az ismeret terjesztéssel.
MS XP-t és Ubuntut is használok a gépemen. Az XP alá letöltöttem a programokat, de nem vettem még használatba. Az Ubuntu alatt megnéztem, hogy megy e a Perl és ahogy írtad is, tökéletes. Szerkesztőben a Hello World -öt megcsináltam, majd .pl-ben mentettem. A szintaxis természetesen jó, ezt két féle szerkesztővel is megnéztem, amit az Ubuntu ajánlott. Mindezek ellenére a terminálban nem indítható el a progi. Először azt írta, hogy "Engedély megtagadva", aztán a fájl tulajdonságainál megadtam az engedélyt magamnak ( :) ) és ettől kezdve "rossz parancsértelmező, nincs ilyen fájl, vagy könyvtár" üzenetet kapok. Önmagában és a terminálban sem tudom futtatni. A legtöbb, amit el tudok érni, hogy a szerkesztőben megjelenik, amit írtam. Mivel kellene társítanom?

Köszönettel,

Bak Márton
17

Hogyan?

Poetro · 2014. Feb. 6. (Cs), 11.42
Azt ugye tudod, hogy ez egy 10 éves cikk? A másik dolog, hogy ha egyébként is parancssoros szkriptek írása a cél, akkor miért nem Python vagy Ruby? Egyrészt jobb a támogatottsága manapság, másrészt tényleg aktívan fejlesztik a Perl-hez képest.

A kérdésre válaszolva: hogyan próbáltad meg futtatni a Perl kódodat? Lehető legpontosabb leírásra lenne szükség, hogy segíteni tudjunk.
19

Igen láttam, hogy régi a

primatus · 2014. Feb. 6. (Cs), 12.04
Igen láttam, hogy régi a dolog....., de ugye újszülöttnek :) ..és a többi fórum meg él, bíztam a válaszban. Köszönöm! (közben megoldódott a dolog) Nem tudom, még nincs elég infóm, hogy milyen úton programnyelven induljak. Szeretem az egyszerű és érthető dolgokat. Nem tartom magamat zseninek és nem vagyok "esőember" sem. :) Mindenképpen ingyenes, platformfüggetlen és grafikus felületen is használható program készítés érdekel. Lehet, hogy jobban járok egy iskolai rendszerű képzéssel, de jelenleg nem tudom, hogy azon belül milyen nyelvi irány lenne jó.
18

Linux alatt *.pl futtatás probléma_válasz

primatus · 2014. Feb. 6. (Cs), 11.56
Nos.... megvan, amit elrontottam. A terminálban nem volt elég az elérési út hanem a "sudo" parancs után a programnév "perl" és utána az elérési út. Ezután kérte még a rendszergazdai pw-öt és lám működik. :) (kis öröm is öröm)