PB173 Perl 07 Reťazce Roman Lacko xlacko1@fi.muni.cz 2023-03-27 Obsah 1. Reťazcové operácie 2. Regulárne výrazy 3. Úvodzovkovité operátory 4. Špeciality Reťazcové operácie Reťazcové operácie Reťazce v Perli sme doteraz používali pomerne intuitívne. Pre zhrnutie: • Reťazce sú skaláry, nie polia. • Veľkosť je uložená interne, nepoužívajú terminálny bajt ‹\0› say length "abc\0def"; # 7 printf("%d\n", strlen("abc\0def")); // 3 • Operácie sa môžu správať rôzne podľa kódovania. 1 Reťazcové operácie Zatiaľ sme videli konštrukciu reťazcov pomocou úvodzoviek (quotes) a zodpovedajúcich operátorov (quote operators): say 'User $ENV{USER}'; # User $ENV{USER} say q"Use $ENV{USER}"; # Same thing say "User $ENV{USER}"; # User pazuzu say qq'Use $ENV{USER}'; # Same thing Operátory ‹q› a ‹qq› nemenia svoj význam, ani keď sa skombinujú s ‹""› alebo ‹''›. Viď ‹ex01t-literals.pl›. 2 Reťazcové operácie: Špeciálne znaky V reťazcoch s interpoláciou sa môžu nachádzať rôzne špeciálne značky: ‹\t›, ‹\n›, ‹\r›, … Tabulátor, koniec riadka, carriage retturn, … (ako v C) ‹\xNN›, ‹\NNN› Bajt zadaný hexadecimálne alebo oktálne. ‹\x{XXXX}›, ‹\o{OOOO}› Unicode znak zadaný v hexadecimálnej alebo oktálnej sústave. ‹\N{NAME}›, ‹\N{U+XXXX}› Unicode znak zadaný názvom alebo jeho ‹U+NNNN› sekvenciou. ‹\x› a ‹\o› nemusia byť vždy ASCII, záleží od platformy. ‹\N{}› je vždy Unicode. 3 Reťazcové operácie: Here Documents Dlhšie odstavce textu je možné vypísať pomocou Here documents ako v Shelli: print <" =~ s/<([^,]+),(\d+)>/$1 x $2/re; # eeee say '<$ENV{USER}>' =~ s/<(.+?)>/$1/re; # $ENV{USER} say '<$ENV{USER}>' =~ s/<(.+?)>/$1/ree; # pazuzu 43 Špeciality Regulárne výrazy: Extended capture groups Skupiny v Perli majú rozšírenia, ktoré sa zapínajú ‹?› za zátvorkou: ‹(?#γ)› komentár ‹(?:α)› vypne zachytávanie hodnoty ‹(?α)› zachytí hodnotu do ‹\g{NAME}› a ‹$+{NAME}› ‹(?'NAME'α)› ako ‹(?α)› ‹(?|α|β|…)› rovnaké číslovanie skupín v ‹α›, ‹β› atď. ‹(?{ CODE })› volanie kódu z RE ‹(??{ CODE })› dosadenie výrazu pri vyhodnocovaní RE ‹(?(COND)α)› podmienený výraz ‹(?(COND)α|β)› podmienený výraz s ‹else› vetvou 44 Regulárne výrazy: Test okolia Test, či sa v okolí vzoru nachádza iný vzor. Nezachytáva žiadnu hodnotu. ‹(?=α)› pohľad dopredu ‹(?!α)› negatívny pohľad dopredu ‹(?<=α)› pohľad dozadu ‹(?