CPAN -- Comprehensive Perl Archive Network
                 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                  On the Internet, nobody knows you're a dog.
                              -- Cartoon caption

                        Jan Pazdziora, 8. prosince 1997

          Perl,  jazyk na  zpracování  textů,  správu  systému či  přístup
      k databázím, má mnoho možností a funkcí již ze své definice,  velice
      významná je ale možnost  použít  moduly,  které řeší přímo náš úkol,
      nebo  je  jen  stačí  patřičným  způsobem  rozšířit.  Všechny  volně
      dostupné  moduly,  spolu s Perlovskými  distribucemi a  dokumentací,
      jsou shromážděny na CPANu,  archívu  mirrorovaném na mnoha serverech
      světa.  Tento  příspěvek  přiblíží  obsah  archívu  a také  naznačí,
      které úkoly se v Perlu řeší tak často, že pro ně existují již hotová
      řešení.

                                  Kde je CPAN

          Vstupním   bodem  k  CPANu  je  URL   http://www.perl.com/CPAN/,
      které  nás  přesměruje k  nejbližšímu  mirroru.  Pokud s  defaultním
      přesměrováním nejsme spokojeni,  můžeme odstranit  poslední  lomítko
      a vybrat si nejvhodnější server ručně. Na TEN-34-CZ je možno zamířit
      například na mirror http://www.fi.muni.cz/ftp/pub/cpan.

                               Kategorie modulů

          Mnoho   z   úkolů,   které   se  chystáme  v  Perlu  udělat,  už
      pravděpodobně dělal někdo před námi. Soubor
      modules/00modlist.long.html
      obsahuje  jednak  obšírný  úvod  do  problematiky,  tedy například i
      informaci  o tom, co to vlastně modul je, jednak seznam existujících
      modulů,  rozdělený  na části podle zaměření a se stručnými komentáři
      ke každému modulu.

          Uveďme zde skupiny, do.nichž jsou moduly neformálně roztříděny:

      - základní  Perlovské  moduly,  rozšíření jazyka Perl a nástroje pro
        tvorbu dokumentace
      - vývojové nástroje
      - rozhraní k operačním systémům
      - sítě a síťování, meziprocesová komunikace
      - datové typy a nástroje pro práci s nimi
      - databázová rozhraní
      - uživatelská rozhraní
      - rozhraní a emulace jiných programovacích jazyků
      - soubory, filesystémy, zamykání souborů
      - zpracování řetězců, textů, parsování, hledání
      - zpracování parametrů příkazové řádky a konfiguračních souborů
      - internacionalizace a lokalizace
      - autentikace, bezpečnost a kryptování
      - World Wide Web, HTML, HTTP, CGI, MIME
      - nástroje pro tvorbu serverů a daemonů
      - archivace, komprese, konverze
      - obrázky, kreslení a grafika
      - pošta a Usenet news
      - řízení výpočtu (zpětná volání a zpracování výjimek)
      - filehandly a vstupně/výstupní proudy
      - MS Windows
      - různé

                               Další obsah CPANu

          Kromě modulů najdeme na CPANu jednak  zdrojové  distribuce Perlu
      samotného v podadresáři src, jednak dokumentaci k Perlu včetně FAQ v
      adresáři doc. Snad stojí zato upozornit  například na doc/perlref-*,
      což  je  vysázená  referenční  příručka  v tom  formátu, v jakém  ji
      prodává nakladatelství  O'Reilly, nebo podadresář doc/FMTEYEWTK, Far
      More Than Everything You Ever Wanted To Know.

          Při hledání  řešení na CPANu může pomoci také vyhledávání na URL
      http://theory.uwinnipeg.ca/search/cpan-search.html  s  nejrůznějšími
      kritérii hledání.

                               Distribuce modulů

          Každý  modul či balík  modulů je šířen jako archív (buď  .tar.gz
      nebo .zip) a je umístěn v adresáři  svého  autora.  Adresáře  autorů
      jsou v podadresáři  authors a odkazy  většinou  jdou přes author/ids
      s  krátkou  identifikací   každého  člověka.   Součástí  názvu  bývá
      číslo  verze a pokud  distribuce  obsahuje  README, je toto na CPANu
      automaticky dostupné vedle daného archívu.

                                Jak instalovat

          Tar rozbalíme, přepneme se do vytvořeného adresáře a spustíme

      perl Makefile.PL
      make
      make test
      make install

          samozřejmě  pokud  předchozí  fáze  proběhly v  pořádku.  Prvním
      bodem by jistě mohla být četba dokumentace a doporučení k instalaci,
      ale kdo čte manuály,  pokud  nejsou  žádné  problémy, že ;-)  Příkaz
      perl Makefile.PL  vytvoří  Makefile, který je nadále svázán (cestami
      a  voláním  perlu)  s tím  interpretem,  který  byl  volán  na  .PL.
      Můžeme  tedy mít na disku více  verzí  Perlu a Makefile.PL  zajistí,
      že instalujeme moduly k té správné.

          Pokud  se  objeví   problémy,   je  vhodné  si  přečíst   návod,
      zda jsme neměli nastavit  nějakou  proměnnou  prostředí  (kupříkladu
      \ORACLE\_HOME)  či se na instalaci  mnohdy  předcházenou  kompilací
      jinak  připravit.  Pokud  dojde k chybě až při  testech, je možné je
      pustit znovu jako

      make test TEST_VERBOSE=1

          což nám může pomoci vyhledat chybu na naší straně.

          Pokud  jsme si  jisti, že chyba  není u nás,  je  vhodné  poslat
      podrobný popis chyby spolu s verzemi Perlu a modulu  autorovi, resp.
      osobě či  mailing-listu  zodpovědnému za údržbu.  Reakce je většinou
      velmi  rychlá  --  pokud o chybě  informujeme,  máme  naději na její
      rychlé odstranění, pokud ne, nemáme si nač stěžovat.

                             Automatická instalace

          S distribucí Perlu  přichází i modul  CPAN,  který  zjednodušuje
      instalace a upgrade  nových  verzí modulů na našem lokálním  stroji.
      Nejjednodušší spuštění

      perl -MCPAN -e shell

          nám nabídne  interaktivní  prompt,  který  dovoluje:  vyhledávat
      moduly na CPANu a porovnávat  jejich verze s verzemi  instalovanými,
      volby (i a m);  najít  moduly,  které  mají  na  CPANu  vyšší  číslo
      verze  (volba r); spustit  instalaci  (install),  která ale proběhne
      jen pokud byl v pořádku  jak make, tak make  test;  vytvořit  seznam
      nainstalovaných  modulů,   abychom  pak  na  jiném  stroji  či  jiné
      platformě  byli  schopni  rychle  nainstalovat  stejnou  konfiguraci
      (autobundle, recompile).

          Modul CPAN při instalaci  modulu  zajistí  stažení  distribuce z
      námi zvoleného CPAN mirroru,  přičemž  použije buď externí  programy
      nebo knihovnu LWP. Porovná  kontrolní součet .taru, rozbalí ho a pak
      provede  posloupnost výše uvedených  instalačních  kroků.  Parametry
      fungování  tohoto správce  instalace jsou uloženy na disku, takže se
      po jeho ukončení neztrácejí.

                                  Dokumentace

          Perl  podporuje  dokumentaci  přímo v souboru  modulu ve formátu
      POD (Plain  Old  Documentation).  Při instalaci je tato  dokumentace
      automaticky  přeformátována  do podoby  manových  stránek a ty  jsou
      nainstalovány  spolu s vlastním  kódem  modulů.  Dokumentace je tedy
      on-line  dostupná i poté, co jsme distribuční balík v zájmu  šetření
      místem z disku smazali.

                                   CGI, MIME

          Jednou z oblastí, kde je popularita  Perlu  velice  vidět,  jsou
      CGI skripty, neboť množství  systémových  funkcí spolu s regulárními
      výrazy  a  textovými   funkcemi  dávají  možnost  rychle  se  dobrat
      požadovaného cíle. Obraty jako

      s/%([0-9a-fA-F]{2})/pack("c",hex(1))/ge;

          jsou  rychlé a efektivní.  Ovšem  dělat po dvacáté tu samou  věc
      rychle omrzí, a proto existuje například modul CGI, který objektovým
      způsobem  nabízí  většinu  funkcí pro zpracování  vstupu  všemi HTTP
      metodami,  manipulaci s předanými  parametry i tvorbu například HTML
      odpovědi.  Výhodou je jednak  čisté  řešení,  jednak  jistá  záruka,
      že kód vyvíjený a podporovaný  Perlovskou  komunitou se chová  podle
      psaných i nepsaných standardů a pamatuje i na neobvyklé situace.

          Typický skript pak může být

       use CGI;

       my q = new CGI;   # načte vstup

       if (q->>param('name') and # test parametrů
         q->>remote_user() eq allow) {
        print q->>header(
         -type=>>'text/html; charset=iso-8859-2',
         -expires=>>'+3d');       # odpověď

        print q->>start_html(-title=>>' ...
      \end{verbatim}

          Podobně  například  pro  práci s MIME  formáty je  pravděpodobně
      lepší  přímo  použít  prověřený  modul,  například  MIME::Base64  či
      MIME::Decoder, než opakovaně vyvíjet  obdobný kód. Volnost Perlu jak
      v otázce  typů, tak  například při práci s velkými  objemy  dat, nám
      vždy dovoluje obrátit se v případě nutnosti na standardní  Perlovské
      prostředky,  kterými  uděláme  rychle  potřebné, a pouze pro rutinní
      části skriptu použijeme funkce z modulu.

          Z CGI a HTML  tedy  snadno  odskočíme  k  modulu  GD,  kterým  v
      reálném čase nakreslíme .gif a ten pošleme  spolu s HTTP  hlavičkami
      na výstup,  případně si můžeme  například  tvorbu grafů  zjednodušit
      nadstavbou nad GD, modulem GIFgraph. Nebo můžeme pomocí Mail::Folder
      procházet  archív  diskusní   skupiny  a  pro  přibližné   vyhledání
      použijeme buď regulární výraz či některý z modulů Text::.

                                    LWP, Net

          Na  úrovni  přístupu  někam po síti pracují moduly Net::, kde za
      dvojtečkou  jsou  jména  protokolů  jako  FTP,  Time  či
      NNTP.  Při  jejich  použití  opět vytvoříme konstruktorem objekt a k
      němu   voláme  metody,  které  se  promítají  na  odpovídající  akce
      použitého protokolu, například

      use Net::NNTP;
      my nntp = new Net::NNTP;
      my group = 'comp.lang.perl.misc';
      my @gr;
      if (@gr = nntp->>group(group)) {

          Nad protokolem HTTP jsou postaveny moduly LWP::, Library for WWW
      access in Perl. Poskytují  několik  úrovní  složitosti (a možností),
      od jednoduchého

      perl -MLWP::Simple -e \
         'getprint "http://www.perl.com/"'

          přes   třídu   HTTP::Request   až  po  široce   konfigurovatelný
      LWP::UserAgent.

                                   Databáze

          Přístup k databázovým  strojům z Perlu se v poslední  době stává
      velmi rozšířenou aplikací. Existuje specifikace rozhraní a modul DBI
      (database  interface), které definuje  skupinu metod pro připojení k
      databázi,  zaslání SQL dotazu a čtení  odpovědi. Pro všechny  hlavní
      databáze pak existují databázové ovladače, DBD::, které převádí tato
      unifikovaná volání na.volání API jednotlivých databází.

          Příklad použití

      use DBI;
      my dbh = DBI->>connect("dbi:Oracle:prod",
                user, pass)
         or die DBI::errstr;
      my sth = dbh->>prepare("insert into cust
                              values (?, ?, ?)")
         or die dbh->>errstr();

          následované   provedením   příkazu.   Takto   psaný  program  je
      přenesitelný pod jinou databázi  pouhou  změnou  parametru ve volání
      connect.  Protože  ale je více než  jeden  způsob,  jak věci  dělat,
      můžeme  samozřejmě  používat  i  nestandardní  rozšíření  definovaná
      databází  a  ovladačem,   která   mohou  být   rychlejší,  ale  také
      neportabilní.

          Jádro většiny  ovladačů je psáno v jazyce C a pro jeho kompilaci
      je  nutná  alespoň  minimální  část  vývojového   prostředí  k  dané
      databázi.  Vždy je nutné  přečíst si README, kde jsou  požadavky pro
      instalaci konkrétního ovladače vyjmenovány.

          Jeden z velmi zajímavých  ovladačů je DBD::pNET,  který  funguje
      jako  proxy  pro  přístup  k databázi  na  vzdáleném  stroji.  Mějme
      například  Informix  na  Solarisu, s vývojovým  prostředím,  k němuž
      chceme přistupovat z Linuxového  stroje.  Informix pro Linux nemáme,
      a proto  nemůžeme  zkompilovat  driver  na  Linuxu  a  použít  přímo
      síťovou podporu databáze (navíc mnohdy za speciální  peníze). Můžeme
      ale  zkompilovat  DBD na Solarisu a spustit na něm tzv.  pNETagenta,
      daemona,  který  požadavky  přicházející z Linuxového  stroje  pošle
      databázi a zpět  zprostředkuje  výsledky.  Přenos  dat je možno  mít
      kryptovaný a přístup povolený například jen pro konkrétní stroje.


            výheň