Pragmatické moduly

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í

autouse

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

bytes

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'
}

charnames

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).

constant

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};

diagnostics

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

integer

Provádí některé operace pouze s celými čísly. Před provedním operace se provede odstranění desetinné části, provede se operace a potom se desetinná část znovu odřízne. Týká se operátorů +, -, *, /, %, +=, -=, *=, /=, %=, unární minus, <, <=, >, >=, ==, !=, <=>, |, &, ^, <<, >>, |=, &=, ^=, <<=, >>=

lib

Slouží k přidání jmen adresářů do pole @INC před překladem programu.

use lib '/home/darena/lib';

locale

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ů.

sort

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(); 

strict

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";

subs

Pragma pro dopřednou deklaraci jmen proměnných

Modul CGI

Modul DBI

Nezávislé databázové rozhraní

© 2003, František Dařena

Valid XHTML 1.0! Valid CSS!