Literály (perldata, perlnumber) ======== 12345 12_345 <-- podtržítka pro zpřehlednění 0b00101010 <-- binární 0177 <-- oktalový 12.34e-56 <-- float 'neinterpolující řetězec' "interpolující: $x $a[1] \"\n" v1.36.2556 <-- v-string 1.36.2556 <-- pokud má více než 2 komponenty, je to také v-string Kontext (perldata) ======= Void Skalární (numerický, booleovský) Seznamový @a ve skalárním kontextu -> délka pole %a ve skalárním kontextu -> "M/N" (zaplněnost tabulky) %a v seznamovém kontextu -> klíč, hodnota, klíč, hodnota, ... scalar EXPR -> vynutí skalární kontext Příklady: - localtime - ($sec, $min, $hour) = localtime - ($a, $b) = ($b, $a) - @ary = (1, 2, @kus, @dalsi, 3) - %hash = ( prvni => 1, druhy => 2 ) - %a = %b Built-in funkce [obecněji funkce s prototypy] lze volat bez závorek: - @ary = (1, 3, sort 4, 2) <-- sort očekává seznam - @ary = ('a', chr 98, 'c') <-- chr očekává skalár - ale pozor, občas se to chová divoce: - print ($foo & 255) + 1, "\n" <-- vyhodnotí se jako print (...) Základní operátory (perlop) ================== Obvyklé "Céčkové" kromě *, & && || <-- vyhodnocují zkráceně, nenormalizují na 0/1 // <-- "default" and or xor not <-- totéž, ale s daleko nižší prioritou ? : <-- taktéž jako v Céčku, ale lze ($a ? $b : $c) = 1; ** <-- umocňování (floatové) . <-- konkatenace == != < > <= >= <=> <-- numerické eq ne lt gt le ge cmp <-- řetězcové += .= apod. <-- jako v Céčku ++ <-- inkrement je magický: "aaz9" -> "aba0" apod. +EXPR <-- je vždy rovno EXPR (i pro stringy) [hodí se pro zdůraznění, že něco je výraz a ne volání funkce] '-' x 80 <-- "násobení" řetězců ... (1,2,3) x 80 <-- ... nebo seznamů: @a = (0) x 100 , => <-- "=>" je totéž jako čárka, ale lze XYZ => 1 Práce se soubory (perlopentut, perlfunc) ================ open IN, 'soubor.in' or die "Cannot open: $!"; <-- $! obsahuje název chyby open OUT, '>soubor.out' or die; while () { <-- vrací další řádek nebo seznam řádků chomp; <-- odřízne "\n" print OUT "[$_]\n"; <-- pozor, píše se bez čárky! } close OUT; close IN; open my $in, '<', 'soubor.in'; <-- modernější: lexikálně lokální, bezpečné > / >> <-- přepsání / připsání na konec +< / +> / +>> <-- pro čtení i zápis |- / -| <-- roura do externího programu: na vstup / z výstupu (lze mu předat další argumenty) Podprogramy (perlsub) =========== sub maximum { my ($a, $b) = @_; <-- @_ obsahuje všechny argumenty return $a > $b ? $a : $b; } Volání: - Sbírá argumenty v seznamovém kontextu: maximum(@a) funguje - Pozor, @_ obsahuje aliasy na argumenty, ne jejich kopie! Return: - Zdědí kontext, v němž se vyhodnocuje volání. - Bez parametrů: undef ve skalárním kontextu, () v seznamovém - Pokud chybí, vrátí se poslední výraz. - Funkce wantarray umí zjistit, v jakém kontextu jsme voláni. Operace se skaláry (perlfunc) ================== defined STRING undef [$var] length STRING substr(STRING, OFFSET, DELKA, NOVE) -> do výsledku jde přiřazovat -> uvede-li se NOVE, rovnou podřetězec přepíše -> DELKA neuvedena: až do konce Operace se seznamy (perlfunc) ================== shift / unshift / pop / push reverse SEZNAM join("+", SEZNAM split(/\s+/, STRING) <-- podle regulárního výrazu split(//, STRING) <-- na znaky -> join("", reverse split //) splice SEZNAM, OFFSET, DELKA, NOVE -> vrací odstraněné prvky, ve skalárním kontextu poslední z nich -> NOVE neuvedeno: prvky smaže -> DELKA neuvedena: až do konce -> OFFSET neuveden: smaže všechno Operace se slovníky (perlfunc) =================== keys %hash / values %hash exists $hash{$klic} delete $hash{$klic}