Kurso de Raku / Progresinta / Pli pri la enkonstruitaj tipoj / Citaj konstruoj

Heredokoj

Heredoc estas cita formo por plur-linia teksto. Anstataŭ limigiloj ĉirkaŭ la teksto, vi donas finan vorton per :to, kaj la ĉeno daŭras de la sekva linio ĝis linio enhavanta nur tiun vorton:

my $text = q:to/END/;
Hello,
World!
END

print $text;

Tio presas:

Hello,
World!

La finilo (END ĉi tie — ajna vorto taŭgas) markas kie la teksto finiĝas. Notu la print: la teksto konservas la novlinion kiu sidas antaŭ la finilo, do ĝi jam finiĝas per liniorompo — uzi say aldonus duan kaj lasus finan malplenan linion. Ĉar la heredoc komenciĝas per q:to, la teksto ne estas interpolata; uzu qq:to por interpoli variablojn:

my $name = 'Anna';

my $greeting = qq:to/EOF/;
Dear $name,
Welcome!
EOF

print $greeting;

Utila detalo: la krommarĝeno de la ferma finilo estas forigita el ĉiu linio de la teksto. Tio ebligas vin krommarĝenigi heredoc-on por kongrui kun la ĉirkaŭa kodo sen ke tiu krommarĝeno aperu en la ĉeno:

sub greeting {
    return q:to/END/;
        Hello,
        World!
        END
}

print greeting;

Tio presas la samajn Hello, kaj World! kiel la unua ekzemplo. Ĉi tie la ferma END estas krommarĝenigita per ok spacetoj, do ok spacetoj estas forigitaj el ĉiu linio, kaj la returnita ĉeno estas nur Hello,\nWorld! sen komencaj spacetoj.

La ferma finilo determinas kiom estas forigita, do ĉiu linio de la teksto devas esti krommarĝenigita almenaŭ tiom. Se linio havas malpli da komencaj spacetoj, Raku ne povas forigi la plenan kvanton kaj avertas — Asked to remove 8 spaces, but the shortest indent is 4 spaces. Tenu la finilon ne pli profunde ol la plej malprofunda linio por eviti tion. Heredoc-oj estas la natura elekto por ŝablonoj, mesaĝoj, kaj ajna tekstobloko kiu etendas tra pluraj linioj.

Kursa navigado

Kvizo — Citaj adverboj   |   Kruda ĉeno


💪 Aŭ iru rekte al la ekzercoj de ĉi tiu sekcio.