Perl, Datové typy (7.díl)

Napsal O webu (») 5. 1. 2008 v kategorii Programování, přečteno: 665×
obrazky/logo_perl.jpg

Řetězce

Práce s řetězci (pokračování)

Jsou k dispozici také sekvence, které ovlivňují reprezentaci následujících znaků. Tyto sekvence se označují také jako modifikátory. Jejich přehled spolu s popisem je uveden v následující tabulce.

ModifikátorVýznam
uPřevede následující znak na VELKÉ PÍSMENO
lPřevede následující znak na malé písmeno
UPřevede následující znaky na VELKÁ PÍSMENA
LPřevede následující znaky na malá písmena
QNásledující nealfanumerické znaky převede uvede obráceným lomítkem
EUkončuje U, L, Q


Modifikátor E se vztahuje vždy k nejbližšímu předcházejícímu modifikátoru, tedy neruší platnost všech předchozích. A nyní malý příklad použití modifikátorů.


$x = ' abcDEF ' ;

$y = ' ABCdef' ' ;

$z = ' a + b = 1 ' ;

Print " \u $x \l $y "; //vytiskne ' AbcDEF aBCdef '

Print " \U $x \L $y "; //vytiskne ' ABCDEF abcdef '

Print " \Qz "; //vytiskne ' a\+b=1 '

Print " \Q\U$z \E$z \E$z "; //vytiskne ' A\+B\=1 a\+b\=1 a+b=1 '



Řetězce v apostrofech



Obrácené apostrofy

Uvedeme-li řetězec v obrácených apostrofech, říkáme tím, že daný řetězec není literálem, ale zápisem pro získání výstupu z provedení externího příkazu se jménem uvedeným vevnitř. I v těchto řetězcích probíhá vkládání hodnot proměnných a metaznaků.


Print `\144\151\162`; //to samé jako print `dir`



Vlastní ohraničení řetězce

V Perlu je možné definovat vlastní způsob ohraničení řetězce - jinak než pomocí operátorů "",'', ``. K tomu slouží funkce, jejichž argumentem jsou libovolné znaky, kromě "bílých znaků". V následující tabulce je souhrn možných způsobů ohraničení řetězců a jejich ekvivalenty zapsané pomocí operátorů s nejběžněji používanými znaky pro ohraničení.

BěžněJinakVýznamVkládání
' 'q / /Literálový řetězecNe
" "qq / / Literálový řetězec s vkládánímAno
( )qw / /Seznam řetězcůNe
/ /m / /Nalezení vzoruAno
s / / / s / / /NahrazeníAno
y / / / tr / / /PřekladNe
" "qr / / /Regulární výrazAno


Hlavní výhodou použití vlastního ohraničovacího symbolu je to, že není třeba před každým symbolem, který by jinak znamenal ukončení řetězce, používat obrácené lomítko. Tím je mimo jiné možné docílit toho, že není nutné před každým apostrofem nebo uvozovkou psát obrácené lomítko, aby bylo jasné, že tímto znakem není řetězec ukončen. Tím se také zvýší čitelnost celého kódu.

V dalším díle se podíváme na víceřádkové řetězce a na konverzi mezi řetězci a čísly. V případě jakýchkoliv dotazů mě kontaktujte na email: habrman@banan.cz.


Autor: Robert Habrman
Štítky: Perl
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Knahaka z IP 178.105.74.*** | 22.1.2011 10:16
$ perl testulULQEIII.pl
Bareword found where operator expected at testulULQEIII.pl line 7, near "//vytis
kne"
        (Missing operator before vytiskne?)
String found where operator expected at testulULQEIII.pl line 7, near "vytiskne
' AbcDEF aBCdef '"
        (Do you need to predeclare vytiskne?)
Bareword found where operator expected at testulULQEIII.pl line 9, near "//vytis
kne"
        (Missing operator before vytiskne?)
String found where operator expected at testulULQEIII.pl line 9, near "vytiskne
' ABCDEF abcdef '"
        (Do you need to predeclare vytiskne?)
Bareword found where operator expected at testulULQEIII.pl line 11, near "//vyti
skne"
        (Missing operator before vytiskne?)
String found where operator expected at testulULQEIII.pl line 11, near "vytiskne
' a\+b=1 '"
        (Do you need to predeclare vytiskne?)
Bareword found where operator expected at testulULQEIII.pl line 13, near "//vyti
skne"
        (Missing operator before vytiskne?)
String found where operator expected at testulULQEIII.pl line 13, near "vytiskne
' A\+B\=1 a\+b\=1 a+b=1 '"
        (Do you need to predeclare vytiskne?)
syntax error at testulULQEIII.pl line 7, near "//vytiskne "
syntax error at testulULQEIII.pl line 9, near "//vytiskne "
syntax error at testulULQEIII.pl line 11, near "//vytiskne "
syntax error at testulULQEIII.pl line 13, near "//vytiskne "
Execution of testulULQEIII.pl aborted due to compilation errors.

User@acer-6e40e97492 ~
$ cat testulULQEIII.pl
$x = ' abcDEF ' ;

$y = ' ABCdef ' ;

$z = ' a + b = 1 ' ;

print " \u $x \l $y "; //vytiskne ' AbcDEF aBCdef '

print " \U $x \L $y "; //vytiskne ' ABCDEF abcdef '

print " \Qz "; //vytiskne ' a\+b=1 '

print " \Q\U$z \E$z \E$z "; //vytiskne ' A\+B\=1 a\+b\=1 a+b=1 '

User@acer-6e40e97492 ~
$
Knahaka z IP 178.105.74.*** | 22.1.2011 10:28
... A to uz jsou opraveny vsechny chyby "Print"-u ....


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel pět a dvě