PageSourceSearch

https://raku.org/

html raku.org collected 2026-10-02 02:56:21 UTC 31,429 bytes, 768 lines download raw bytes

1<!doctype html>
2<html lang="en" data-theme="dark">
3<head>
4<title>Raku®</title>
5<meta content="The Raku® programming language." name="description" />
6<meta charset="utf-8" />
7<meta content="width=device-width, initial-scale=1" name="viewport" />
8<script crossorigin="anonymous" integrity="sha384-xcuj3WpfgjlKF+FXhSQFQ0ZNr39ln+hwjN3npfM9VBnUskLolQAcN80McRIVOPuO" src="https://unpkg.com/[email protected]"></script>
8
9
10<script src="https://cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/highlight.min.js"></script>
10
11
12<script src="https://cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/languages/haskell.min.js"></script>
12
13
14<script>
15            (function () {
16                const savedTheme = localStorage.getItem("theme");
17
18                let theme;
19                if (savedTheme) {
20                    theme = savedTheme;
21                } else {
22                    theme = window.matchMedia("(prefers-color-scheme: dark)").matches
23                        ? "dark"
24                        : "light";
25                }
26
27                document.documentElement.setAttribute("data-theme", theme);
28            })();
29        </script>
29
30
31<script defer data-website-id="bd5ca56b-3bad-47c7-b0a1-73ba5c3b5713" src="https://cloud.umami.is/script.js"></script>
31
32
33<link type="image/x-icon" href="/img/favicon.ico" rel="icon" />
34<link rel="stylesheet" href="/css/styles.css" />
35<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css" rel="stylesheet" />
36<style>.tab-menu {
37    display: block;
38    justify-content: left;
39}
40.tab-links {
41    display: block;
42}
43.tab-links > li.active > a {
44    text-decoration: underline;
45}
46
47@media (max-width: 768px) {
48    .tab-menu {
49        text-align: left;
50    }
51    .tab-links > * {
52        padding-top: 0;
53        padding-bottom:1em;
54    }
55}
56</style>
57
58<style>.tab-menu {
59    display: block;
60    justify-content: left;
61}
62.tab-links {
63    display: block;
64}
65.tab-links > li > a {
66    border-radius: var(--pico-border-radius);
67    border-top-left-radius: 0;
68    border-top-right-radius: 0;
69    background-color: transparent;
70    text-decoration: none;
71    cursor: pointer;
72    user-select: none;
73}
74.tab-links > li.active > a {
75    text-decoration: none;
76    border-bottom: var(--pico-border-width) solid var(--pico-primary-hover);
77}
78
79@media (max-width: 768px) {
80    .tab-menu {
81        text-align: center;
82    }
83    .tab-links > * {
84        padding-top: 0;
85        padding-bottom:1em;
86    }
87}
88</style>
89
90<style>dashboard {
91  display: flex;
92  flex-wrap: wrap;
93  justify-content: center;
94  gap: 1rem;
95}
96</style>
97
98<style>dashboard > article {
99  display: flex;
100  align-items: center;
101  flex-direction: column;
102
103  /* Responsive sizing */
104  flex: 1 1 600px;
105  max-width: 800px;
106
107  padding-left: 0.5rem !important;
108  padding-right: 0.5rem !important;
109  margin-top: 0 !important;
110}
111
112dashboard > article > header {
113  border-bottom-color: darkgray;
114  border-radius: 0px;
115}
116
117dashboard > article > footer {
118  border-top-color: darkgray;
119  border-radius: 0px;
120  margin-top: auto;
121}
122</style>
123
124<style>/* Custom styles for the hamburger menu */
125.menu {
126    display: none;
127    flex-direction: column;
128    gap: 10px;
129    position: absolute;
130    top: 60px;
131    right: 20px;
132    background: rgba(0, 0, 0, .95);
133    padding: 1rem;
134    border-radius: 8px;
135    box-shadow: 0 4px 6px rgba(128, 128, 128, .2);
136    z-index: 800;
137}
138
139.menu a {
140    display: block;
141}
142
143.menu.show {
144    display: flex;
145}
146
147.hamburger {
148    color: var(--pico-primary);
149    display: none;
150    cursor: pointer;
151    font-size: 2.5rem;
152    background: none;
153    border: none;
154    padding: 0.5rem;
155}
156
157@media (max-width: 768px) {
158    .hamburger {
159        display: block;
160    }
161
162    .nav-links {
163        display: none;
164    }
165}
166</style>
167</head>
168
169<body>
170<header class="container">
171<nav>
172<ul>
173<li class="logo">
174<span>
175<a target="_self" style="display: flex; align-items: center; gap: 0.5rem; text-decoration: none;" href="https://raku.org">
176<img title="Hi, my name is Camelia. I'm the spokesbug for the Raku Programming Language. Raku has been developed by a team of dedicated and enthusiastic open source volunteers, and continues to be developed. You can help too. The only requirement is that you know how to be nice to all kinds of people (and butterflies)." src="/img/camelia-logo.png" width="60px" />
177<p style="margin:0">Raku®</p>
178</a></span></li></ul>
179<ul hx-swap="outerHTML" class="nav-links" hx-target="#content">
180<li>
181<a href="/community">community</a></li>
182<li>
183<a href="/learn">learn</a></li>
184<li>
185<a href="/tools">tools</a></li>
186<li>
187<a href="https://docs.raku.org" target="_blank" rel="noopener noreferrer">docs</a></li>
188<li>
189<a href="https://raku.land" target="_blank" rel="noopener noreferrer">modules</a></li>
190<li>
191<a rel="noopener noreferrer" href="https://github.com/rakudo/rakudo" target="_blank">source</a></li>
192<li>
193<a href="/install">install</a></li>
194<li>
195                    <a style="font-variant-emoji: text" id ="sunIcon">&#9728;</a>
196                    <a style="font-variant-emoji: text" id ="moonIcon">&#9790;</a>
197                </li>
198</ul>
199<button id="hamburger" class="hamburger">&#9776;</button>
200<ul hx-target="#content" id="menu" hx-swap="outerHTML" class="menu">
201<li>
202<a href="/community">community</a></li>
203<li>
204<a href="/learn">learn</a></li>
205<li>
206<a href="/tools">tools</a></li>
207<li>
208<a href="https://docs.raku.org" target="_blank" rel="noopener noreferrer">docs</a></li>
209<li>
210<a target="_blank" href="https://raku.land" rel="noopener noreferrer">modules</a></li>
211<li>
212<a rel="noopener noreferrer" target="_blank" href="https://github.com/rakudo/rakudo">source</a></li>
213<li>
214<a href="/install">install</a></li>
215</ul>
216</nav></header>
217<main class="container">
218<div>
219<style>#background {
220    background: url('/img/Butterfly_bottom_PSF_transparent.gif');
221    top: 140px;
222    left: 0vw;
223    width: 100vw;
224    height: 360px;
225    background-size: auto;
226    opacity: 0.1;
227    filter: grayscale(100%);
228    transform: rotate(-9deg);
229    position: fixed;
230    background-repeat: no-repeat;
231    background-position: center top;
232    z-index: -1;
233    pointer-events: none;
234    padding: 20px;
235}
236</style>
237
238<div id="background"></div>
239</div>
240<div align="center">
241<h1>Raku is an expressive, multi&#8209;paradigm, Open Source language that works the way you think!</h1>
242<div style="min-height:1em;"></div>
243<div>
244<a target="_self" href="/install">
245<button>
245Install</button></a>
246<div style="min-height:0.4em;"></div>
247<p>Linux, macOS, Windows, Docker</p>
248</div>
249<div style="min-height:1em;"></div>
250</div>
251<div>
252<div class="tabs">
253<nav class="tab-menu">
254<ul class="tab-links">
255<li class="active">
256<a hx-get="/buttabs/1/multi-paradigm" data-value="1" hx-target="#buttabs-1-content">multi-paradigm</a></li>
257<li class="">
258<a data-value="2" hx-get="/buttabs/1/strict-gradual" hx-target="#buttabs-1-content">strict-gradual</a></li>
259<li class="">
260<a data-value="3" hx-target="#buttabs-1-content" hx-get="/buttabs/1/interactive-mode">interactive-mode</a></li>
261<li class="">
262<a data-value="4" hx-get="/buttabs/1/command-line" hx-target="#buttabs-1-content">command-line</a></li>
263<li class="">
264<a data-value="5" hx-get="/buttabs/1/thriving-ecosystem" hx-target="#buttabs-1-content">thriving-ecosystem</a></li>
265<li class="">
266<a hx-get="/buttabs/1/one-liners" hx-target="#buttabs-1-content" data-value="6">one-liners</a></li>
267</ul></nav>
268<div id="buttabs-1-content">
269<div align="left" class="tab"><style>
270    #grid-1 {
271        display: grid;
272        grid-template-columns: 2.2fr 3.2fr;
273        grid-template-rows: repeat(1, 1fr);
274        gap: 1.5em;
275        direction: rtl;
276        
277    }
278
279    @media (max-width: 1024px) {
280        #grid-1 {
281            display: flex;
282            flex-direction: column-reverse;
283            gap: 0.1em;
284        }
285    }
286</style>
287
288<div id="grid-1">
289<article style="direction:ltr;">
290<h3>Multi Paradigm</h3>
291<p>Smoothly combine coding styles:</p>
292<ul>
293<li>Object-Oriented:
294<code>class Circle</code> encapsulates data and behavior.
295</li>
296<li>Functional: built-ins like
297<code>.map</code> and operators like
298<code>».</code> and
299<code>[+]</code> .
300</li>
301<li>Declarative:
302<code>...</code> infers sequences, such as the powers of two.
303</li>
304<li>Procedural: the overall code flow is straightforward.</li>
305</ul>
306<p style="font-size:small; text-align:right">
307<em>...natural syntax &amp; semantics</em></p>
308</article>
309<article style="direction:ltr;">
310                <div class="raku-code">
311                    <button class="copy-code" title="copy code">â¿»</button>
312                    
313                    <div><pre class="nohighlights">
314<span class="rainbow-keyword">class</span>&nbsp;Circle&nbsp;&#123;<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="rainbow-keyword">has</span>&nbsp;<span class="rainbow-name_scalar">$.radius</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="rainbow-keyword">method</span>&nbsp;area&nbsp;&#123;&nbsp;π&nbsp;<span class="rainbow-operator">*</span>&nbsp;<span class="rainbow-name_scalar">$.radius</span>²&nbsp;&#125;<br>&#125;<br><br><span class="rainbow-keyword">my</span>&nbsp;<span class="rainbow-name_array">@radii</span>&nbsp;<span class="rainbow-operator">=</span>&nbsp;1,2,4...256;<br><br><span class="rainbow-keyword">my</span>&nbsp;<span class="rainbow-name_array">@circles</span>&nbsp;<span class="rainbow-operator">=</span>&nbsp;<span class="rainbow-routine">map</span>&nbsp;&#123;&nbsp;Circle.<span class="rainbow-routine">new</span>(<span class="rainbow-operator">:</span>$^radius)&nbsp;&#125;<span class="rainbow-operator">,</span>&nbsp;<span class="rainbow-name_array">@radii</span>;<br><br><span class="rainbow-keyword">my</span>&nbsp;<span class="rainbow-name_scalar">$total-area</span>&nbsp;<span class="rainbow-operator">=</span>&nbsp;[<span class="rainbow-operator">+</span>]&nbsp;<span class="rainbow-name_array">@circles</span>».area;<br><br><br><span class="rainbow-routine">say</span>&nbsp;<span class="rainbow-string_delimiter">&quot;</span><span class="rainbow-string">Total area: </span><span class="rainbow-name_scalar">$total-area</span><span class="rainbow-string_delimiter">&quot;</span>;
315</pre>
316</div>
317                </div>
318            </article>
319</div></div></div>
320</div>
321<div class="tabs">
322<nav class="tab-menu">
323<ul class="tab-links">
324<li class="active">
325<a hx-target="#buttabs-2-content" hx-get="/buttabs/2/grammars" data-value="1">grammars</a></li>
326<li class="">
327<a hx-get="/buttabs/2/concurrency" hx-target="#buttabs-2-content" data-value="2">concurrency</a></li>
328<li class="">
329<a hx-target="#buttabs-2-content" data-value="3" hx-get="/buttabs/2/lazy-evaluation">lazy-evaluation</a></li>
330<li class="">
331<a hx-get="/buttabs/2/role-composition" data-value="4" hx-target="#buttabs-2-content">role-composition</a></li>
332<li class="">
333<a hx-get="/buttabs/2/mixins" hx-target="#buttabs-2-content" data-value="5">mixins</a></li>
334<li class="">
335<a hx-get="/buttabs/2/multi-dispatch" data-value="6" hx-target="#buttabs-2-content">multi-dispatch</a></li>
336<li class="">
337<a data-value="7" hx-get="/buttabs/2/signatures" hx-target="#buttabs-2-content">signatures</a></li>
338<li class="">
339<a hx-get="/buttabs/2/io" data-value="8" hx-target="#buttabs-2-content">io</a></li>
340</ul></nav>
341<div id="buttabs-2-content">
342<div class="tab" align="left"><style>
343    #grid-7 {
344        display: grid;
345        grid-template-columns: 2.2fr 3.2fr;
346        grid-template-rows: repeat(1, 1fr);
347        gap: 1.5em;
348        direction: ltr;
349        
350    }
351
352    @media (max-width: 1024px) {
353        #grid-7 {
354            display: flex;
355            flex-direction: column-reverse;
356            gap: 0.1em;
357        }
358    }
359</style>
360
361<div id="grid-7">
362<article style="direction:ltr;">
363<h3>Grammars</h3>
364<p>Definable grammars for pattern matching and generalized string processing.</p>
365<p style="font-size:small; text-align:right">
366<em>...domain specific languages</em></p>
367</article>
368<article style="direction:ltr;">
369                <div class="raku-code">
370                    <button class="copy-code" title="copy code">â¿»</button>
371                    
372                    <div><pre class="nohighlights">
373<span class="rainbow-keyword">grammar</span>&nbsp;Parser&nbsp;&#123;<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="rainbow-keyword">rule</span>&nbsp;&nbsp;TOP&nbsp;&nbsp;<span class="rainbow-regex_delimiter">&#123;</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_literal">I</span><span class="rainbow-regex_special"> &lt;love&gt; &lt;lang&gt; </span><span class="rainbow-regex_delimiter">&#125;</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="rainbow-keyword">token</span>&nbsp;love&nbsp;<span class="rainbow-regex_delimiter">&#123;</span><span class="rainbow-regex_special"> &#39;</span><span class="rainbow-regex_literal">♥</span><span class="rainbow-regex_special">&#39; | </span><span class="rainbow-regex_literal">love</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_delimiter">&#125;</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="rainbow-keyword">token</span>&nbsp;lang&nbsp;<span class="rainbow-regex_delimiter">&#123;</span><span class="rainbow-regex_special"> &lt; </span><span class="rainbow-regex_literal">Raku</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_literal">Rust</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_literal">Go</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_literal">Python</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_literal">Ruby</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_literal">TypeScript</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_literal">PHP</span><span class="rainbow-regex_special"> &gt; </span><span class="rainbow-regex_delimiter">&#125;</span><br>&#125;<br><br><span class="rainbow-routine">say</span>&nbsp;Parser.parse:&nbsp;<span class="rainbow-string_delimiter">&#39;</span><span class="rainbow-string">I ♥ Raku</span><span class="rainbow-string_delimiter">&#39;</span>;<br><span class="rainbow-comment"># OUTPUT: 「I ♥ Raku」 love =&gt; 「♥」 lang =&gt; 「Raku」<br></span><br><span class="rainbow-routine">say</span>&nbsp;Parser.parse:&nbsp;<span class="rainbow-string_delimiter">&#39;</span><span class="rainbow-string">I love Python</span><span class="rainbow-string_delimiter">&#39;</span>;<br><span class="rainbow-comment"># OUTPUT: 「I love Python」 love =&gt; 「love」 lang =&gt; 「Python」</span>
374</pre>
375</div>
376                </div>
377            </article>
378</div></div></div>
379</div>
380<div class="tabs">
381<nav class="tab-menu">
382<ul class="tab-links">
383<li class="active">
384<a hx-target="#buttabs-3-content" data-value="1" hx-get="/buttabs/3/unicode-regexes">unicode-regexes</a></li>
385<li class="">
386<a hx-get="/buttabs/3/hyper-operators" data-value="2" hx-target="#buttabs-3-content">hyper-operators</a></li>
387<li class="">
388<a hx-get="/buttabs/3/feed-operators" data-value="3" hx-target="#buttabs-3-content">feed-operators</a></li>
389<li class="">
390<a hx-get="/buttabs/3/rational-numerics" hx-target="#buttabs-3-content" data-value="4">rational-numerics</a></li>
391<li class="">
392<a data-value="5" hx-get="/buttabs/3/sets-junctions" hx-target="#buttabs-3-content">sets-junctions</a></li>
393<li class="">
394<a hx-get="/buttabs/3/smartmatching" hx-target="#buttabs-3-content" data-value="6">smartmatching</a></li>
395</ul></nav>
396<div id="buttabs-3-content">
397<div align="left" class="tab"><style>
398    #grid-15 {
399        display: grid;
400        grid-template-columns: 2.2fr 3.2fr;
401        grid-template-rows: repeat(1, 1fr);
402        gap: 1.5em;
403        direction: rtl;
404        
405    }
406
407    @media (max-width: 1024px) {
408        #grid-15 {
409            display: flex;
410            flex-direction: column-reverse;
411            gap: 0.1em;
412        }
413    }
414</style>
415
416<div id="grid-15">
417<article style="direction:ltr;">
418<h3>Unicode Regexes</h3>
419<p>The most powerful Unicode-aware regular expression engine available, especially for complex text processing.</p>
420<p>It shines in tasks where precision and multilingual support are essential such as Grapheme and Diacritic handling.</p>
421<p style="font-size:small; text-align:right">
422<em>...unicode centric text handling</em></p>
423</article>
424<article style="direction:ltr;">
425                <div class="raku-code">
426                    <button class="copy-code" title="copy code">â¿»</button>
427                    
428                    <div><pre class="nohighlights">
429<span class="rainbow-routine">say</span>&nbsp;<span class="rainbow-string_delimiter">&quot;</span><span class="rainbow-string">Cool😎</span><span class="rainbow-string_delimiter">&quot;</span>&nbsp;<span class="rainbow-operator">~~</span>&nbsp;<span class="rainbow-regex_delimiter">/</span><span class="rainbow-regex_special">&lt;:Letter&gt;* &lt;:Block(&quot;Emoticons&quot;)&gt;/; </span><span class="rainbow-comment"># 「Cool😎」<br></span><span class="rainbow-regex_literal">say</span><span class="rainbow-regex_special"> &quot;</span><span class="rainbow-regex_literal">Cześć</span><span class="rainbow-regex_special">&quot; ~~ </span><span class="rainbow-regex_literal">m</span><span class="rainbow-regex_special">:</span><span class="rainbow-regex_literal">ignoremark</span><span class="rainbow-regex_delimiter">/</span>&nbsp;Czesc&nbsp;<span class="rainbow-operator">/</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="rainbow-comment"># 「Cześć」<br></span><span class="rainbow-routine">say</span>&nbsp;<span class="rainbow-string_delimiter">&quot;</span><span class="rainbow-string">WEIẞE</span><span class="rainbow-string_delimiter">&quot;</span>&nbsp;<span class="rainbow-operator">~~</span>&nbsp;<span class="rainbow-regex_delimiter">m:ignorecase/</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_literal">weisse</span><span class="rainbow-regex_special"> </span><span class="rainbow-regex_delimiter">/</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="rainbow-comment"># 「WEIẞE」<br></span><span class="rainbow-routine">say</span>&nbsp;<span class="rainbow-string_delimiter">&quot;</span><span class="rainbow-string">หนูแฮมสเตอร์</span><span class="rainbow-string_delimiter">&quot;</span>&nbsp;<span class="rainbow-operator">~~</span>&nbsp;<span class="rainbow-regex_delimiter">/</span><span class="rainbow-regex_special">&lt;:Letter&gt;+/;                   </span><span class="rainbow-comment"># 「หนูแฮมสเตอร์」</span><span class="rainbow-regex_delimiter"></span>
430</pre>
431</div>
432                </div>
433            </article>
434</div></div></div>
435</div>
436</div>
437<div class="tabs">
438<nav class="tab-menu">
439<ul class="tab-links">
440<li class="active">
441<a hx-target="#buttabs-4-content" hx-get="/buttabs/4/L10N" data-value="1">L10N</a></li>
442<li class="">
443<a hx-get="/buttabs/4/LLM" data-value="2" hx-target="#buttabs-4-content">LLM</a></li>
444<li class="">
445<a data-value="3" hx-get="/buttabs/4/CPAN" hx-target="#buttabs-4-content">CPAN</a></li>
446<li class="">
447<a hx-get="/buttabs/4/FFI" hx-target="#buttabs-4-content" data-value="4">FFI</a></li>
448<li class="">
449<a hx-target="#buttabs-4-content" data-value="5" hx-get="/buttabs/4/Web">Web</a></li>
450<li class="">
451<a data-value="6" hx-target="#buttabs-4-content" hx-get="/buttabs/4/ORM">ORM</a></li>
452</ul></nav>
453<div id="buttabs-4-content">
454<div align="left" class="tab"><style>
455    #grid-21 {
456        display: grid;
457        grid-template-columns: 2.2fr 3.2fr;
458        grid-template-rows: repeat(1, 1fr);
459        gap: 1.5em;
460        direction: ltr;
461        
462    }
463
464    @media (max-width: 1024px) {
465        #grid-21 {
466            display: flex;
467            flex-direction: column-reverse;
468            gap: 0.1em;
469        }
470    }
471</style>
472
473<div id="grid-21">
474<article style="direction:ltr;">
475<h3>Localization &amp; Internationalization</h3>
476<p>This snippet is written using Japanese identifiers and strings, showcasing localization (L10N) and internationalization (I18N) features.</p>
477<p>Localized Raku code can be automatically translated to any other localization.</p>
478<p style="font-size:small; text-align:right">
479<em>...think global: act local</em></p>
480</article>
481<article style="direction:ltr;">
482                <div class="raku-code">
483                    <button class="copy-code" title="copy code">â¿»</button>
484                    
485                    <div><pre class="nohighlights">
486私の&nbsp;<span class="rainbow-name_scalar">$数</span>&nbsp;<span class="rainbow-operator">=</span>&nbsp;プロンプト&nbsp;<span class="rainbow-string_delimiter">&quot;</span><span class="rainbow-string">数を教えてください </span><span class="rainbow-string_delimiter">&quot;</span>;<br>言う&nbsp;<span class="rainbow-string_delimiter">&quot;</span><span class="rainbow-string">数は</span><span class="rainbow-escape">&#123;</span><span class="rainbow-name_scalar">$数</span><span class="rainbow-escape">&#125;</span><span class="rainbow-string">です。</span><span class="rainbow-string_delimiter">&quot;</span>;<br><br>もしも&nbsp;<span class="rainbow-name_scalar">$数</span>&nbsp;<span class="rainbow-operator">&lt;=</span>&nbsp;10&nbsp;&#123;<br>&nbsp;&nbsp;&nbsp;&nbsp;言う&nbsp;<span class="rainbow-string_delimiter">&quot;</span><span class="rainbow-string">数は10以下です</span><span class="rainbow-string_delimiter">&quot;</span>;<br>&#125;&nbsp;その他&nbsp;&#123;<br>&nbsp;&nbsp;&nbsp;&nbsp;言う&nbsp;<span class="rainbow-string_delimiter">&quot;</span><span class="rainbow-string">数は10以上です</span><span class="rainbow-string_delimiter">&quot;</span>;<br>&#125;
487</pre>
488</div>
489                </div>
490            </article>
491</div></div></div>
492</div>
493<div>
494<p>Supported by:</p><style>
495    #grid-27 {
496        display: grid;
497        grid-template-columns: repeat(5, 1fr);
498        grid-template-rows: repeat(1, 1fr);
499        gap: 1em;
500        direction: ltr;
501        border-radius:12.75px;
502padding:10px;
503justify-items:center;
504background-color:white;
505align-items:center;
506
507    }
508
509    @media (max-width: 1024px) {
510        #grid-27 {
511            display: flex;
512            flex-direction: column;
513            gap: 1em;
514        }
515    }
516</style>
517
518<div id="grid-27">
519<a href="https://www.dotcom-monitor.com/">
520<img src="static/logos/adjusted/logo-dotcom-monitor.png" /></a>
521<a href="https://www.loadview-testing.com/">
522<img src="static/logos/adjusted/LoadView-logo-alt.png" /></a>
523<a href="https://webhostingbuddy.com/">
524<img src="static/logos/adjusted/web-hosting-buddy-logo.png" /></a>
525<a href="https://www.findmyelectric.com/">
526<img src="static/logos/adjusted/findmyelectric-logo.png" /></a>
527<a href="https://www.synthauto.com/">
528<img src="static/logos/adjusted/synthauto-logo.png" /></a>
529</div>
530<p style="font-size:small; text-align:right">
531<em>if you would like to support Raku, please send a message to 
532<a href="/cdn-cgi/l/email-protection#ed9e9d82839e829f84838aad9f8c8698c3829f8ad29e988f87888e99d0" New Sponsor""><span class="__cf_email__" data-cfemail="e99a9986879a869b80878ea99b88829cc7869b8e">[email&#160;protected]</span></a>
533</em></p>
534</div>
535<div>
536<p>Trusted by:</p><style>
537    #grid-28 {
538        display: grid;
539        grid-template-columns: repeat(6, 1fr);
540        grid-template-rows: repeat(1, 1fr);
541        gap: 1em;
542        direction: ltr;
543        padding:10px;
544background-color:white;
545align-items:center;
546justify-items:center;
547border-radius:12.75px;
548
549    }
550
551    @media (max-width: 1024px) {
552        #grid-28 {
553            display: flex;
554            flex-direction: column;
555            gap: 1em;
556        }
557    }
558</style>
559
560<div id="grid-28">
561<a href="">
562<img src="static/logos/adjusted/cns-logo.png" /></a>
563<a href="https://www.edument.se">
564<img src="static/logos/adjusted/edument-logo.png" /></a>
565<a href="https://www.haltec.net">
566<img src="static/logos/adjusted/haltec-logo.png" /></a>
567<a href="https://www.oetiker.ch/en_US">
568<img src="static/logos/adjusted/oetiker_partner-logo.png" /></a>
569<a href="https://qbrc.swmed.edu">
570<img src="static/logos/adjusted/qbrc-logo.jpg" /></a>
571<a href="https://virtual.blue">
572<img src="static/logos/adjusted/virtual_blue-logo.png" /></a>
573</div>
574<p style="font-size:small; text-align:right">
575<em>organisations that use Raku in a production setting</em></p>
576</div>
577<div align="center" style="min-width:400px;">
578<div style="min-height:1em;"></div>
579<div>
580<a href="/install" target="_self">
581<button>Install</button></a>
582<div style="min-height:0.4em;"></div>
583<p>Linux, macOS, Windows, Docker</p>
584</div>
585<div style="min-height:1em;"></div>
586</div>
587</main>
588<footer class="container">
589<hr />
590<p>
591            Hypered with <a href="https://htmx.org" target="_blank">htmx</a>.
592            Aloft on <a href="https://harcstack.org" target="_blank"><b>&Aring;ir</b></a>.
593            Constructed in <a href="https://cro.raku.org" target="_blank">cro</a>.
594            Written in <a href="https://raku.org" target="_blank">raku</a>.
595            &nbsp;&amp;&nbsp;
596            Styled by <a href="https://picocss.com" target="_blank">picocss</a>.
597        </p>
598<p>Please report any issues with this site at <a href="https://github.com/Raku/raku.org" target="_blank">Raku/raku.org</a>.</p>
599<p>The Raku® Programming Language</p>
600</footer>
vendor: 109 bytes, lines 600-601
600
601<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
601<script>    // Hilite-helper.js
602
603    function copyCode() {
604        // copy code block to clipboard adapted from solution at
605        // https://stackoverflow.com/questions/34191780/javascript-copy-string-to-clipboard-as-text-html
606        // if behaviour problems with different browsers add stylesheet code from that solution.
607        const copyButtons = Array.from(document.querySelectorAll('.copy-code'));
608        copyButtons.forEach( function( button ) {
609        // this works with / without label
610        var codeElement = button.nextElementSibling;
611        while (codeElement && codeElement.tagName !== 'DIV') {
612          codeElement = codeElement.nextElementSibling;
613        }
614        button.addEventListener( 'click', function(insideButton) {
615            var container = document.createElement('div');
616            container.innerHTML = codeElement.innerHTML;
617                container.style.position = 'fixed';
618                container.style.pointerEvents = 'none';
619                container.style.opacity = 0;
620                document.body.appendChild(container);
621                window.getSelection().removeAllRanges();
622                var range = document.createRange();
623                range.selectNode(container);
624                window.getSelection().addRange(range);
625                document.execCommand("copy", false);
626                document.body.removeChild(container);
627            });
628        });
629    }
630
631    // DOM ready
632    document.addEventListener('DOMContentLoaded', function () {
633        // trigger the highlighter for non-Raku code
634        copyCode();
635        hljs.highlightAll();
636    });
637
638    // HTMX updates
639    document.addEventListener('htmx:afterSwap', function () {
640        copyCode();
641        hljs.highlightAll();
642    });
643</script>
643
644
645<script>function setupTabLinks() {
646    const links = document.querySelectorAll('.tab-links > *');
647    const hiddenInput = document.getElementById('selectedOption');
648    const display = document.getElementById('selectedDisplay');
649
650    links.forEach(link => {
651        link.addEventListener('click', function (e) {
652            e.preventDefault();
653
654            links.forEach(l => l.classList.remove('active'));
655
656            this.classList.add('active');
657
658            const value = this.getAttribute('data-value');
659            if (hiddenInput) hiddenInput.value = value;
660            if (display) display.textContent = `Selected: ${this.textContent}`;
661        });
662    });
663}
664
665// Run on initial load
666document.addEventListener('DOMContentLoaded', setupTabLinks);
667
668// Re-run after HTMX swaps in new content
669document.body.addEventListener('htmx:afterSwap', setupTabLinks);
670</script>
670
671
672<script>function setupTabLinks() {
673    const links = document.querySelectorAll('.tab-links > *');
674    const hiddenInput = document.getElementById('selectedOption');
675    const display = document.getElementById('selectedDisplay');
676
677    links.forEach(link => {
678        link.addEventListener('click', function (e) {
679            e.preventDefault();
680
681            links.forEach(l => l.classList.remove('active'));
682
683            this.classList.add('active');
684
685            const value = this.getAttribute('data-value');
686            if (hiddenInput) hiddenInput.value = value;
687            if (display) display.textContent = `Selected: ${this.textContent}`;
688        });
689    });
690}
691
692// Run on initial load
693document.addEventListener('DOMContentLoaded', setupTabLinks);
694
695// Re-run after HTMX swaps in new content
696document.body.addEventListener('htmx:afterSwap', setupTabLinks);
697</script>
697
698
699<script>
700            // Show/hide icons
701            function updateIcons(theme) {
702                if (theme === "dark") {
703                    sunIcon.style.display = "none";
704                    moonIcon.style.display = "block";
705                } else {
706                    sunIcon.style.display = "block";
707                    moonIcon.style.display = "none";
708                }
709            }
710            function setTheme(mode) {
711        const htmlElement = document.documentElement;
712        let newTheme = mode;
713
714        if (mode === "toggle") {
715            const currentTheme = htmlElement.getAttribute("data-theme") || "light";
716            newTheme = currentTheme === "dark" ? "light" : "dark";
717        } else if (mode === "system") {
718            newTheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
719        }
720
721        htmlElement.setAttribute("data-theme", newTheme);
722        localStorage.setItem("theme", newTheme); // Save theme to localStorage
723        updateIcons(newTheme);
724    }
725
726    // update icons on page load
727    document.addEventListener("DOMContentLoaded", () => {
728        const theme = document.documentElement.getAttribute("data-theme");
729        updateIcons(theme);
730    });
731
732    // Listen for system dark mode changes and update the theme dynamically
733    window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
734        setTheme("system"); // Follow system setting
735    });
736
737            // Attach to icon click
738            const sunIcon  = document.getElementById("sunIcon");
739            const moonIcon = document.getElementById("moonIcon");
740
741            document.getElementById("sunIcon").addEventListener("click", () => setTheme("dark"));
742            document.getElementById("moonIcon").addEventListener("click", () => setTheme("light"));
743        </script>
743
744
745<script>const hamburger = document.getElementById('hamburger');
746const menu = document.getElementById('menu');
747
748if (hamburger && menu) {
749    hamburger.addEventListener('click', () => {
750        menu.classList.toggle('show');
751    });
752
753    document.addEventListener('click', (e) => {
754        if (!menu.contains(e.target) && !hamburger.contains(e.target)) {
755            menu.classList.remove('show');
756        }
757    });
758}
759
760// Hide the menu when resizing the viewport to a wider width
761window.addEventListener('resize', () => {
762    if (menu && window.innerWidth > 768) {
763        menu.classList.remove('show');
764    }
765});
766</script>
766
767</body>
768</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.