Raku kurss / Padziļināti / Vairāk par iebūvētajiem tipiem / Citēšanas konstrukcijas 🆕
Heredoc
Heredoc ir citēšanas forma daudzrindu tekstam. Tā vietā, lai
lietotu norobežotājus ap tekstu, jūs norādāt terminatora vārdu ar
:to, un virkne turpinās no nākamās rindas līdz rindai, kas
satur tikai šo vārdu:
my $text = q:to/END/;
Hello,
World!
END
print $text;Tas izdrukā:
Hello,
World!Terminators (END šeit — jebkurš vārds derēs) atzīmē, kur
teksts beidzas. Ievērojiet print: teksts saglabā jaunrindu,
kas atrodas pirms terminatora, tāpēc tas jau beidzas ar rindu
pārtraukumu — izmantojot say, tiktu pievienota vēl viena un
paliktu tukša rinda beigās. Tā kā heredoc sākas ar q:to,
teksts netiek interpolēts; izmantojiet qq:to, lai
interpolētu mainīgos:
my $name = 'Anna';
my $greeting = qq:to/EOF/;
Dear $name,
Welcome!
EOF
print $greeting;Noderīga detaļa: aizverošā terminatora atkāpe tiek noņemta no katras teksta rindas. Tas ļauj atkāpēt heredoc, lai tas atbilstu apkārtējam kodam, un šī atkāpe nenonāk virknē:
sub greeting {
return q:to/END/;
Hello,
World!
END
}
print greeting;Tas izdrukā to pašu Hello, un World! kā
pirmajā piemērā. Šeit aizverošais END ir atkāpēts par
astoņām atstarpēm, tāpēc astoņas atstarpes tiek noņemtas no katras
rindas, un atgrieztā virkne ir vienkārši Hello,\nWorld! bez
vadošajām atstarpēm.
Aizverošais terminators nosaka, cik daudz tiek noņemts, tāpēc katrai teksta rindai jābūt atkāpētai vismaz tik daudz. Ja kādai rindai ir mazāk vadošo atstarpes, Raku nevar noņemt pilnu apjomu un brīdina — Asked to remove 8 spaces, but the shortest indent is 4 spaces. Turiet terminatoru ne dziļāk par vismazāk atkāpēto rindu, lai no tā izvairītos. Heredoc ir dabiska izvēle veidnēm, ziņojumiem un jebkuram teksta blokam, kas aptver vairākas rindas.
Kursa navigācija
← Viktorīna — Citēšanas apzīmētāji | Neapstrādāta virkne →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.