Vazebné operátory
Operace porovnání podle vzoru, nahrazení nebo překlady implicitně pracují s pro¬měnnou $_. Operátor = ~ umožňuje, aby se tyto operace prováděly s jinými operandy. Na levé straně je hodnota, ve které se provádí vyhledávání, nahrazení nebo překlad, napravo je vzor, operátor porovnání podle vzoru, nahrazení nebo překladu. V následujícím příkladu jsou v proměnné obsahující pouze číslice nahrazeny počáteční nuly mezerami.
If ($x =~ /^\d+$/){
$x =~ s/^0+/' 'x length $&/e;
}
Operátor =~ vrací pravdivou hodnotu v případě úspěšného nalezení, nahrazení či překladu, v opačném případě vrací hodnotu nepravdivou. Konkrétní forma pravdivé nebo nepravdivé hodnoty závisí na výsledku operátoru na pravě straně. Operátor !~ provádí to samé jako operátor =~ ale návratová hodnota je logickou negací návratové hodnoty operátoru = ~.
Mulitiplikativní operátory
Operátor * provádí násobení dvou operandů, operátor / provádí dělení. Tato operace probíhá v pohyblivé řádové čárce, pokud nepoužijeme "use integer".
Print 10/3;
// Vytiskne 3.33333333333333
Use integer;
Print 10/3;
// Vytiskne 3
Operátor % převede operandy na celá čísla a vrátí zbytek po jejich celočíselném dělení. Je-li druhý operand kladný, je zbytkem po dělení číslo, které je rozdílem hodnoty prvního operandu a čísla, které je násobkem druhého operandu a je také menší nebo rovno prvnímu operandu. Je-li druhý operand záporný, je výsledkem rozdíl prvního operandu a nejbližšího násobku druhého operandu, který je větší nebo roven hodnotě prvního operandu, nabývá hodnot nula až hodnota o jedna menší než hodnota druhého operandu.
10 % 3;
// Zbytek 1, tedy 10-(3*3)
10 % -5;
// Zbytek je -4, tedy 11-(-5*-3)
-9 % 4;
// Zbytek je 3
-9 % -4;
// Zbytek je -1
Operátor x je operátorem opakování. Ve skalárním kontextu vrátí řetězec, který obsahuje hodnotu levého operandu tolikrát, kolik je hodnota výrazu na pravě straně operandu. V seznamovém kontextu vrací seznam o počtu prvku, jenž je uveden na pravé straně.
$x = '5' x 5;
// Proměnná $x obsahuje '5 5 5 5 5'
@pole = (3) x 5;
// Proměnná @pole obsahuje (3, 3, 3, 3, 3)
@pole2 = (1, 2) x 5;
// Proměnná @pole2 obsahuje (1, 2, 1, 2, 1, 2, 1, 2, 1, 2)
A to by bylo pro dnešek všechno. V dalším díle se podíváme na aditivní operátory, operátor posuvu, relační operátor a operátor rovnosti. V případě jakýchkoliv dotazů mě kontaktujte na email: habrman@banan.cz.
Autor: Robert Habrman