Víceřádkové řetězce
V Perlu je možné pracovat s několikařádkovým textem jako s řetězcem. Počátečním ohraničovacím symbolem je <<. Ihned za tímto uvozovacím symbolem následuje posloupnost znaků, kterou bude celý text končit. Tato posloupnost musí začínat na novém řádku a za ním musí následovat znak konce řádku. Je-li řetězec za << v uvozovkách nebo bez, pracuje se s celým řetězcem jako kdyby byl v uvozovkách. Je-li posloupnost znaků v apostrofech, pracuje se s nim jako s řetězcem v apostrofech. Text v obrácených uvozovkách je považován za externí příkazy, které jsou postupně vykonávány.
Print <<KONEC;
První řádek textu
Druhý řádek textu
KONEC
Koncový oddělovač textu, který není uveden v uvozovkách, apostrofech nebo obrácených apostrofech, musí následovat ihned za symbolem <<. Pakliže tomu tak není, je za koncový oddělovač považován prázdný znak, což znamená, že text bude končit prvním řádkem, na kterém bude pouze znak konce řádku.
Print << KONEC #chyba
První řádek textu
Druhý řádek textu
KONEC
Print <<
První řádek textu
Druhý řádek textu
#tady končí celý řetězec
Konverze mezi řetězci a čísly
Pokud se číselná hodnota použije jako řetězec, automaticky se tato hodnota převede na řetězec, který obsahuje zápis příslušného čísla. V opačném případě interpret přeskočí počáteční bílé znaky (mezery, tabulátory, konce řádků), vezme nejdelší souvislou část řetězce představující platný zápis čísla a zbytek řetězce ignoruje. Pokud řetězec nezačíná zápisem čísla, je vyhodnocen jako hodnota 0.
Print ‘a’.123;
#Vytiskne ‘a123’
Print ‘12a’ + 3;
#Vytiskne ‘15’ (12+3)
Print ‘-1.2e2ggh’ * ‘2’;
#Vytiskne ‘-240’ (-120*2)
Print ‘klm’>>3;
#Vytiskne ‘0’ (0>>3)
Perl nerozpozná čísla zadaná hexadecimálně nebo oktalově. Pro převod je nutné volat funkce hex nebo oct. Také případná podtržítka nejsou chápána stejně jako u číselného literálu.
Print 2 * ‘0xf’
#Vytiskne ‘0’ (2*0)
Print 2 * hex ‘0xf’
#Vytiskne ‘30’ (2*15)
V dalším díle se podíváme na datový typ pole a seznam. V případě jakýchkoliv dotazů mě kontaktujte na email: habrman@banan.cz.
Autor: Robert Habrman