Pragmatické moduly jsou speciálními moduly, které ovlivňují překlad programu. Proto musejí být vtaženy pomocí use. Použitím require se moduly používají až v době běhu programu, takže na práci překladače namají žádný vliv. Potlačení vlivu pragmatického modulu na překladač se dá potlačit pomocí funkce no. Ta je opakem funkce use a na normální moduly většinou nemá vliv.
Většina těchto modulů je má lexikálně vymezený rozsah platnosti. Podobně se chovají proměnné vymězené pomocí my. Znamená to, že jejich platnost končí na konci bloku, kde byl modul použit. Je také platný v blocích vnořených. Po skončení bloku platí opět to nastavení, jaké bylo použito v bloku nadřazeném. Ve vnořeném bloku lze tedy změnit vlastnosti překladu buď vtažením (pomocí use), nebo zrušením použití modulu (pomocí no).
use strict; # tady platí striktní režim # ... { no strict; # tady striktní režim neplatí # ... } # tady už zase striktní režim platí
Pomocí tohoto pragmatu lze docílit toho, že modul bude zaveden až v okamžiku použití jeho fuknce. Přesněji řečeno se provádí export jmen funkcí zadaných jako parametr při použití tohoto pragmatického modulu.
use autouse 'Modul' => 'funkce1', 'funkce2'; fukce1; # dojde k volání Modul::funkce1
Při použití use bytes pohlíží Perl na řetězce jako na posloupnost bytů, nikoliv jako na posloupnost znaků. Při použití znakové sady obsahující 256 znaků (každý znak se vejde do jednoho byte) nemá toto pragma žádný vliv. Ten se projeví až při použití znakových sad s větším rozsahem (Unicode).
V okamžiku uložení řetězce v nějaké znakové sadě se řetězec označí za znaková data a i například funkce length pak nevrací počet bytů, ale počet znaků. Při použití use bytes se na takový řetězec jako na řetězec ve znakové sadě o 256 znacích.
$x = chr(500); # znaková sada UF8 print "Délka je ", length $x, "\n"; # vytiskne 'Délka je 1' printf "Obsah: %vu\n", $x; # vytiskne 'Obsah: 500' { use bytes; print "Délka je ", length $x, "\n"; # vytiskne 'délka je 2' printf "Obsah: %vu\n", $x; # 'Obsah: 199.180' }
Toto pragma definuje jména znaků, která se používají jako součást sekvencí \N{JMÉNO}. Jako parametr je možné zadat řetězec :full, :short nebo jména znakových sad.
Pokud je použito :full hledá se mezi celými jmény znaků ve znakové sadě Unicode.
use charnames ':full'; print "\N{GREEK SMALL LETTER SIGMA}";
Jména znaků v tomto případě jsou zadávána v následujícím tvaru:
PÍSMO CAPITAL LETTER JMÉNO PÍSMO SMALL LETTER JMÉNO PÍSMO LETTER JMÉNO
Je-li modul použit s :short, je třeba navíc zadat písmo, v němž hledáme znak se zadaným jménem.
use charnames ':short'; print "\N{GREEK:SIGMA}";
Jako první je zadán název písma a za dvojtečkou je název znaku. Je třeba dávat pozor na to, aby okolo dvojtečky nebyly žádné mezery.
Použijeme-li pragma s názvy písem, v sekvenci \N{} se píše pouze jméno znaku. Znak daného jména se hledá v zadaných písmech v tom pořadí, v jakém jsou uvedeny.
use charnames qw(greek cyrillic); print "\N{sigma}"; # z písma greek print "\N{be}"; # z písma cyrillic
Je-li jméno znaku uvedeno celé malými písmeny, bude i zobrazený znak malý (minuska). V opačném případě bude zobrazeno velké písmeno (verzálka).
Pomocí pragmatu use constant je se vytvářejí symboly, které jsou chápány jako konstanty s neměnnou hodnotou. Ve skutečnosti je v balíku, kde byla konstanta vytvořena, definován konstantní podprogram, který vrací stále jednu hodnotu.
use constant PI => 3.14159265; use constant OSOBY => 'Dařena', 'Kutín'; use constant MAILY => {darena => 'darena@pef', kutin => 'kutin@pef'}; use constant CISLA => [1, 2, 3, 4, 5]; use constant FUNKCE => sub {print 123};
Tento pragmatický modul slouží k lepšímu popisu případných chyb či podezřelých operací. Automaticky se zapne režim -w a je nastavena proměnná $^W. Standardní funkce, které se vyvolávají při vzniku chyby nebo varování jsou nahrazeny novými, které čtou popisy vzniklých stavů z externího souboru (perldiag.pod).
Použitím příznaku -v nebo -verbose se před prvním výpisem diagnostického hlášení vypíše stručný seznam použitých konvencí.
use diagnostic -verbose
Slouží k přidání jmen adresářů do pole @INC před překladem programu.
use lib '/home/darena/lib';
Povoluje překladači použití národních prostředí podle standardu POSIX.
Týká se interních operací, projeví se např. u regulárních výrazů (\w), u řetězců (\l, \u apod.), relačních operátorů pro porovnání řetězců.Umožňuje ovlivnit řadící algoritmus.
use sort 'stable'; # garantuje stabilitu use sort '_quicksort'; # quicksort algoritmus use sort '_mergesort'; # mergesort algoritmus use sort '_qsort'; # alias pro quicksort # současně používaný algoritmus my $current = sort::current();
Omezuje provádění nebezpěčných operací.
# všechny nebezpečné operace use strict; # zakazuje používání symbolických odkazů use strict "refs"; # zakazuje použití holých slov, které nejsou podprogramy use strict "subs"; # zakazuje použití proměnných, které nejsou vymezeny pomocí our # nebo my nebo nejsou plně kvalifikovány use strict "vars";
Pragma pro dopřednou deklaraci jmen proměnných
use CGI; $q = new CGI; # create new CGI object print $q->header, # create the HTTP header $q->start_html('hello world'), # start the HTML $q->h1('hello world'), # level 1 header $q->end_html; # end the HTML use CGI qw/:standard/; print header, # create the HTTP header start_html('hello world'), # start the HTML h1('hello world'), # level 1 header end_html; # end the HTML
@names = $query->param; @values = $query->param('foo'); $value = $query->param('foo'); $query->param(-name=>'foo',-values=>['an','array','of','values']); $query->param(-name=>'foo',-value=>'the value'); $query->append(-name=>'foo',-values=>['yet','more','values']); $query->delete('foo'); $query->delete_all();
print $query->header(-type=>'image/gif', -nph=>1, -status=>'402 Payment required', -expires=>'+3d', -cookie=>$cookie, -charset=>'utf-7', -attachment=>'foo.gif', -Cost=>'$2.00'); print $query->start_html(-title=>'Secrets of the Pyramids', -author=>'fred@capricorn.org', -base=>'true', -target=>'_blank', -meta=>{'keywords'=>'pharaoh secret mummy', 'copyright'=>'copyright 1996 King Tut'}, -style=>{'src'=>'/styles/style1.css'}, -BGCOLOR=>'blue');
Nezávislé databázové rozhraní
© 2003, František
Dařena |