Strings ======= Typ Str: immutable string .chars <-- počet znaků (později řekneme, co je znak :)) .lc, .uc <-- převod na malá/velká písmena .split("sep") <-- rozdělí na části oddělené separátorem .comb <-- ... na znaky .words <-- ... na slova .starts-with("mň") .ends-with("ňau") Quoting constructs ================== Q[...] / Q@...@ <-- řetězec "as is" q[...] / '...' <-- řetězec s escapováním zpětným lomítkem (\\, \') qq[...] / "..." <-- řetězec s escapováním a interpolací \n \r \t ... <-- jako v Céčku \x[2661] <-- srdíčko \c[BLACK HEART] $var @var[] <-- bez [] se neinterpoluje %h<...> $x.m() <-- volání metody vyžaduje závorky &x() <-- volání funkce vyžaduje & a závorky {...} <-- libovolný výraz Q:s:b [...] <-- interpoluje skaláry a escapuje say Q:to/END/; <-- here-document (odstraňuje odsazení) 42 END Containers ========== jméno -> kontejner -> hodnota my $x = 42; <-- $x odkazuje na kontejner typu Scalar, ten na hodnotu 42 $x = 43; <-- řeknu kontejneru, aby do sebe přiřadil novou hodnotu say $x; <-- automaticky vybalí hodnotu z kontejneru say $x.WHAT; <-- Int say $x.VAR.WHAT; <-- Scalar my $y := 42; <-- $y odkazuje přímo na hodnotu 42 ("bind") $y = 43; <-- nelze provést, $y není kontejner $y := $x; <-- $x, $y jsou dvě jména pro tentýž kontejner if $x =:= $y <-- $x, $y jsou bindnuté na totéž (ještě silnější než ===) my Int $z; <-- typovaný kontejner my Int:D $z=5; <-- definovaný Int (musí mít inicializátor) ($a, $b) = (1, 2); <-- do Listu kontejnerů lze přiřazovat (po složkách) for $a, $b <-> $x { $x = 0 } <-- "<->" binduje místo přiřazování hodnoty Lists ===== 1, 2 <-- 2-prvkový list (1, 2) <-- taktéž (1; 2) <-- i tento (1) <-- toto není list, nýbrž jednička v závorkách (1,) <-- 1-prvkový list (1,2),(1,2) <-- list, jehož prvky jsou 2 listy (1,2;3,4) <-- totéž jako ((1,2),(3,4)) <-- ('abc', 'def') (1,2) eqv (1,2) <-- ekvivalence obsahu (slabší než ===) (1,2)[0] <-- indexuje, mimo rozsah dá Nil, záporný index výjimku my @a = 1,2; <-- zde z listu vznikne pole my @a := 1,2; <-- zde se bindne skutečný list my @a := 1; <-- nejde, @a vyžaduje roli Positional Arrays ====== Pole je mutable list -- ze všech položek dělá kontejnery [1,2,3] <-- 3-prvkové pole my @a = 1,2,3; <-- též vznikne pole +@a <-- v numerickém kontextu dává počet prvků ?@a <-- v booleovském True <=> neprázdné my Int @b; <-- typované prvky my @b[10,5] <-- fixní velikost @a[4] <-- mimo rozsah čteme Any (viz též my @a is default(42)) @a[*-1] <-- poslední prvek @a[*+0] <-- poposlední prvek :) @a[*] <-- list všech prvků pole (kopie) @a[1,2,3] <-- řez (vrací list) for @a { } <-- iteruje přes prvky pole for $a { } <-- proběhne jen jednou, i když je $a pole $x ∈ @a <-- náležení do seznamu Flattening ========== (1,2),(3,4) <-- seznam seznamů flat((1,2),(3,4)) <-- "zplacatí" seznam (rekurzivně) |(1,2),|(3,4) <-- z (1,2) i (3,4) se stane Slip, ten se expanduje Ranges ====== 1..5 1..^5 <-- kromě 5 1^..^5 <-- 2..4 ^5 <-- 0..^5 1,3...11 <-- aritmetická posloupnost 2,4,8...256 <-- geometrická 1,3...* <-- nekonečná 1,1,*+*...* <-- generovaná funkcí {rand} ... * <-- posloupnost náhodných čísel (pozor, bez {} nefunguje)