1
Konstanty a proměnné
Konstanta = něco, co se nemění, je konstantní.(constant)
Př. konstant: 4, -23, "pepř", "Ať žije král!"
Proměnná = něco, co se mění, obsahuje data.(variable)
– krabička, jejíž obsah lze měnit– dočasné uchování nějaké hodnoty
2
Název proměnné
• V Perlu začíná znakem $.• Je utvořen z alfanumerických znaků a podtržítka. • První znak za $ nesmí být číslice.• Maximální délka 251 znaků• Záleží na velikosti písmen ! • Nesmí obsahovat mezery.• Nepoužívat znaky s diakritikou !
3
Název proměnné - příklady
Správně
• $pi• $pozdrav• $Pozdrav• $Pozdrav_z_Prahy• $b20
Špatně
• $10_j• $proměnná x• $jiná-proměnná• $jina-promenna
4
Obsah proměnné
Skalární veličina, tedy číslo nebo řetězec
• $pi = -3.14• $pozdrav = "Dobrý den"
Řetězec je v uvozovkách !
5
Typy čísel
• Integer (celé číslo)• Floating point (racionální číslo)
Integer• Lze oddělovat tisíce podtržítky (jen pro čitelnost
programu): (10 milionů = 10_000_000)
• Maximální číslo uložitelné v počítači: 32 bitů, tj. 4 294 967 295Pro větší čísla je třeba použít zvl. modul.
6
Typy čísel
Floating point (tzv. reálné číslo)
• čísla s desetinnou čárkou• výsledky aritmetických operací s necelým
výsledkem• odmocniny (2), další iracionální čísla ()• Zaokrouhlování !POZOR!
7
Numerické operátory
1. ** mocnina2. unární minus obracení znaménka3. * / % násobení, dělení, zbytek4. + - sčítání, násobení
Červená čísla vyjadřují přednosti (precedence).Chceme-li to jinak, použijeme závorky
3 + 5 * 4 je něco jiného než (3 + 5) * 4
8
Přiřazovací operátor =• Není to rovnítko !• $pi = 3.14; $pozdrav = "Ahoj";• Vícenásobné přiřazení
• $f = $g = $k = 8;nebo dokonce• $a = 5 * ($c = 2); výsledek: a je 10, c je 2 - nehezké• $x = 5 * 6;
$y = $x - 6;$z = $y / 8;
9
Autoinkrement, autodekrement
• Autoinkrement ++– zvětší hodnotu proměnné o 1
• Autodekrement --– zmenší hodnotu proměnné o 1
• Využití v cyklech• $a++; $b--; ++$a; --$b;
$a = 0;$b = $a++ + 5;$c = ++$a + 5;
$b je 5, $a je 1$c je 6, $a je 1
10
Řetězce
• Řetězec = (libovolně dlouhá) posloupnost libovolných znaků ohraničená z obou stran uvozovacími znaky
Př.: "Dobrý den, agente 007""Dobrý den\n"
• Uvozovací znaky (delimiters) = většinou uvozovky
písmenka, číslice, i řídící znaky
11
Typy uvozovek
• Dvojité uvozovky ("řetězec") stejné• interpolation:
• je-li v řetězci proměnná, nahrazuje se svým obsahem• interpretují se tzv. "escape sequences", např. \n (konec
řádku), \t (tabulátor)
• Jednoduché uvozovky ('řetězec') stejné – proměnné se nenahrazují svým obsahem, řetězec se
bere doslova - no interpolation
12
Interpolace
• Chceme-li vytisknout znak těsně za jméno proměnné, užijeme složené závorky:
#!/usr/bin/perluse warnings;$pozdrav = "Ahoj";print "$pozdrav , Pepku !\n"; print '$pozdrav , Pepku !\n';
Ahoj , Pepku ! ... odskok na nový řádek$pozdrav , Pepku !\n ... bez odskoku
print "${pozdrav}, Pepku !\n"; Ahoj, Pepku !
Tady není mezera
13
Escaping
• Jak vytisknout znaky \ " ' ?
print "\\"; print "'"; print '"'; print "\"";
\'""
zpětné lomítkoapostrofuvozovkyuvozovky
• Je třeba rozmyslet, jaké oddělovače použít
• Lze použít vlastní oddělovače !
14
Vlastní oddělovače• Hodí se, když chceme pracovat se
složitějším textem, který obsahuje víc znaků• Je třeba vybrat takové oddělovače, které se
v textu nevyskytují
q/ totéž jako 'qq/ totéž jako "
print q/Ahoj, Pepku!/;print qq/${pozdrav}, Pepku/;
Místo / lze použít libovolný nealfanumerický znak, tedy např. # | + _, nebo dvojici (), {}, <>,[]
15
Čísla a řetězce
• Převody mezi čísly a řetězci - automatické• Př. $deset="10" ... to je řetězec, ale
vyskytne-li se mezi čísly, převede se taky na číslo.
• Automatické převody neplatí pro osmičková ani hexadecimální čísla, ta se musí explicitně převést pomocí funkcí oct a hex.
16
Řetězcové operátory
• Zřetězení = konkatenace (concatenation)– přilepení jednoho řetězce na konec druhého
– je-li třeba, číslo se převede na řetězec
print "hrad"."u";
$koncovka = "em";$kmen = "hrad";$tvar = $kmen . $koncovka";print "$tvar\n";
hradu
print "Dvakrát pět je ".2*5.".\n"; Dvakrát pět je 10.
17
Ještě přiřazování
• = není rovnítko, takže lze i:• $x = $x - 6;$slovo = $slovo." ".$slovo;
• Další možný zápis:• $x -= 6; totéž jako $x = $x - 6;• $x += -6; totéž jako $x = $x + (-6);• $x *= 6; totéž jako $x = $x * 6;• $x /= 6; totéž jako $x = $x / 6;• $slovo .= " "; $slovo = $slovo . " ";
18
Globální a lokální proměnná
• Globální proměnnou (global variable) lze používat (tzn. i měnit) v celém programu
• Lokální proměnná (local / lexical variable) je definovaná jen pro blok, ve kterém je deklarovaná a v případných podblocích– Je třeba ji deklarovat : – my $promenna;– Zvykneme si deklarovat všechny proměnné
19
Lokální proměnné
$w = 8; # globální proměnnáprint $w; # vytiskne 8{
my $w; # lokální proměnná uvnitř bloku$w = 19;print $w; # vytiskne 19
}print $w; # vytiskne 8
Použití v podprogramech
20
Hlídání proměnných
• Globální proměnné není třeba deklarovat, ale je to vhodné
• our $glob_promenna;• Kontrola, aby byly všechny proměnné
deklarovány - use strict;• Při opomenutí – varování při překladu• Globální proměnné se používají málo
21
Příklad
#!/usr/bin/perl# skládání slovuse warnings;use strict;my $kmen, $koncovka;$kmen = <STDIN>; # uživatel zadá kmen z klávesnice$koncovka = <STDIN>; # totéž pro koncovkuprint "Celé slovo je: ".$kmen.$koncovka.".\n";
Vstup a výstup - jen pro začátek
• Vstup - data, která zadáváme programu, aby je zpracoval
• diamantový operátor < >
• Výstup - data, která program vyprodukuje, výsledky
• Standardní vstup - klávesnice• Standardní výstup - obrazovka
Standardní vstup
• Diamantový operátor přečte jednu řádku ze vstupu• $vstup = <STDIN>;
• v proměnné $vstup je to, co zapíše uživatel na klávesnici, včetně znaku konce řádku
• Konec řádku:• UNIX : "\n" line feed (LF) - chr(10)• Windows : "\r\n" carriage return - chr(13) (CR LF)
• chomp($vstup);• odstranění konce řádku z obsahu proměnné
Standardní výstup
• Soubor lze otevřít i pro výstup, ale to necháme na později
• Standardní výstup se otevře automaticky vždy• print [seznam čísel a/nebo řetězců, oddělených
čárkami]• print "Dnes je krásně\n"; • print "Dnes" , " ", "je k", "rásn", "ě\n"; # totéž
Unixová odbočka - přesměrování standardního vstupu a výstupu
• Standardní vstup / výstup lze přesměrovat ze /do souboru• Přesměrování vstupu <• Přesměrování výstupu
- > vytvoření souboru- >> přidání na konec existujícího souboru
./tisk.perl > vystup.txt
Výstup programu tisk.perl se zapíše do souboru vystup.txt.
Pokud soubor už existoval, přepíše se.
Ještě o číslech
42; # integer 42
12.5; # floating point number
101873.000; # 101 873
.005 # 0.005
5E-3; # stejné číslo jako na předchozím řádku
23e-100; # zápis velmi malých čísel (23 krát 10 na minus 100
2.3E-99; # stejné číslo jako na předchozím řádku
23e6; # 23 milionů
23_000_000; # stejné číslo jako na předchozím řádku
Formátování výstupu
• Příkaz print vypíše řetězec přesně tak, jak mu ho zadáme• Čísla ale upraví do co nejjednoduššího tvaru
print 4.000, ' ', .00000000033, ' ', 2E-4, ' ', 9.77E-5, " ", 10_181_973, print 4.000, ' ', .00000000033, ' ', 2E-4, ' ', 9.77E-5, " ", 10_181_973,
' ', 9.87E9, " ", 86.7E14, "\n";' ', 9.87E9, " ", 86.7E14, "\n";Výsledek bude:Výsledek bude:
4 3.3e-10 0.0002 9.77e-05 10181973 9870000000 8.67e+154 3.3e-10 0.0002 9.77e-05 10181973 9870000000 8.67e+15
Můžeme si ho ale naformátovat podle svých představ - funkce Můžeme si ho ale naformátovat podle svých představ - funkce printfprintf
my $x = 9.1234567890123456;my $x = 9.1234567890123456;
printf "%.5f\n", $x; # tisk čísla na 5 desetinných míst, tedy 9.12346printf "%.5f\n", $x; # tisk čísla na 5 desetinných míst, tedy 9.12346