270 likes | 399 Vues
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. Název proměnné.
E N D
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
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 !
Špatně $10_j $proměnná x $jiná-proměnná $jina-promenna Název proměnné - příklady Správně • $pi • $pozdrav • $Pozdrav • $Pozdrav_z_Prahy • $b20
Obsah proměnné Skalární veličina, tedy číslo nebo řetězec • $pi = -3.14 • $pozdrav = "Dobrý den" Řetězec je v uvozovkách !
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.
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!
Numerické operátory ** mocnina unární minus obracení znaménka * / % násobení, dělení, zbytek + - 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
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;
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; $b je 5, $a je 1 $c je 6, $a je 1 $a = 0; $b = $a++ + 5; $c = ++$a + 5;
Ř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" písmenka, číslice, i řídící znaky • Uvozovací znaky (delimiters) = většinou uvozovky
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
Interpolace #!/usr/bin/perl use warnings; $pozdrav = "Ahoj"; print "$pozdrav , Pepku !\n"; print '$pozdrav , Pepku !\n'; Ahoj , Pepku ! ... odskok na nový řádek $pozdrav , Pepku !\n ... bez odskoku • Chceme-li vytisknout znak těsně za jméno proměnné, užijeme složené závorky: print "${pozdrav}, Pepku !\n"; Ahoj, Pepku ! Tady není mezera
Escaping • Jak vytisknout znaky \ " ' ? \ ' " " zpětné lomítko apostrof uvozovky uvozovky print "\\"; print "'"; print '"'; print "\""; • Je třeba rozmyslet, jaké oddělovače použít • Lze použít vlastní oddělovače !
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í print q/Ahoj, Pepku!/; print qq/${pozdrav}, Pepku/; q/ totéž jako ' qq/ totéž jako " Místo / lze použít libovolný nealfanumerický znak, tedy např. # | + _, nebo dvojici (), {}, <>,[]
Čí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.
Ř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"; hradu $koncovka = "em"; $kmen = "hrad"; $tvar = $kmen . $koncovka"; print "$tvar\n"; print "Dvakrát pět je ".2*5.".\n"; Dvakrát pět je 10.
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 . " ";
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é
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
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
Příklad #!/usr/bin/perl # skládání slov use warnings; use strict; my $kmen, $koncovka; $kmen = <STDIN>; # uživatel zadá kmen z klávesnice $koncovka = <STDIN>; # totéž pro koncovku print "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 • print • 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, ' ', 9.87E9, " ", 86.7E14, "\n"; Výsledek bude: 4 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 printf my $x = 9.1234567890123456; printf "%.5f\n", $x; # tisk čísla na 5 desetinných míst, tedy 9.12346