CINXE.COM
class Str | Raku Documentation
<!DOCTYPE html> <html lang="en" class="fontawesome-i2svg-active fontawesome-i2svg-complete" style="scroll-padding-top:60px"> <head> <title>class Str | Raku Documentation</title> <meta charset="UTF-8" /> <link href="/assets/images/Camelia.ico" rel="icon" type="image/x-icon"/> <link rel="stylesheet" href="/assets/css/Website.css"/> <link rel="stylesheet" href="/assets/css/typegraph-styling.css"/> <link rel="stylesheet" href="/assets/css/typegraph-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/typegraph-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/filtered-toc-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/filtered-toc-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/announce-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/announce-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/all.min.css"/> <link rel="stylesheet" href="/assets/css/listf-styling-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/listf-styling-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/options-search-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/options-search-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/page-styling-main.css"/> <link rel="stylesheet" href="/assets/css/css/page-styling-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/page-styling-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/chyronToggle-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/chyronToggle-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/centreToggle-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/centreToggle-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/tm-styling.css"/> <link rel="stylesheet" href="/assets/css/tm-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/tm-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/rainbow-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/rainbow-light.css" title="light"/> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/css/autoComplete.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-light.min.css" title="light" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css" title="dark" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="/assets/scripts/all.min.js"></script><script src="/assets/scripts/filter-script.js"></script><script src="/assets/scripts/tableManager.js"></script><script src="https://cdn.jsdelivr.net/npm/fuzzysort@2.0.4/fuzzysort.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/autoComplete.min.js"></script><script src="/assets/scripts/filtered-toc.js"></script><script src="/assets/scripts/options-search.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/haskell.min.js"></script><script src="/assets/scripts/page-styling.js"></script><script src="/assets/scripts/announcements.js"></script><script src="/assets/scripts/rainbow.js"></script> </head> <body class="has-navbar-fixed-top"> <div id="class_Str" class="top-of-page"></div> <nav class="navbar is-fixed-top is-flex-touch" role="navigation" aria-label="main navigation"> <div class="navbar-item" style="margin-left: auto;"> <div class="left-bar-toggle" title="Toggle Table of Contents & Index"> <label class="chyronToggle left"> <input id="navbar-left-toggle" type="checkbox"> <span class="text">Contents</span> </label> </div> </div> <div class="container is-justify-content-space-around"> <div class="navbar-brand"> <div class="navbar-logo"> <a class="navbar-item" href="/"> <img src="/assets/images/camelia-recoloured.png" alt="Raku" width="52.83" height="38"> </a> <span class="navbar-logo-tm">tm</span> </div> <a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navMenu"> <span aria-hidden="true"></span> <span aria-hidden="true"></span> <span aria-hidden="true"></span> </a> </div> <div id="navMenu" class="navbar-menu"> <div class="navbar-start"> <a class="navbar-item" href="/introduction" title="Getting started, Tutorials, Migration guides"> Introduction </a> <a class="navbar-item" href="/reference" title="Fundamentals, General reference"> Reference </a> <a class="navbar-item" href="/miscellaneous" title="Programs, Experimental"> Miscellaneous </a> <a class="navbar-item" href="/types" title="The core types (classes) available"> Types </a> <a class="navbar-item" href="/routines" title="Searchable table of routines"> Routines </a> <a class="navbar-item" href="https://raku.org" title="Home page for community"> Raku<sup>®</sup> </a> <a class="navbar-item" href="https://web.libera.chat/#raku" title="IRC live chat"> Chat </a> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"> More </a> <div class="navbar-dropdown is-right is-rounded"> <hr class="navbar-divider"> <a class="navbar-item js-modal-trigger" data-target="download-ebook"> Download E-Book (epub) </a> <hr class="navbar-divider"> <a class="navbar-item" href="/about"> About </a> <hr class="navbar-divider"> <a class="navbar-item has-text-red" href="https://github.com/raku/doc-website/issues"> Report an issue with this site </a> <hr class="navbar-divider"> <a class="navbar-item" href="https://github.com/raku/doc/issues"> Report an issue with the documentation content </a> <hr class="navbar-divider"> <label class="navbar-item centreToggle" title="Enable/Disable Announcements" style="--switch-width: 18"> <input id="cancelAnnouncements" type="checkbox"> <span class="text">Announcements</span> <span class="on">suppressed</span> <span class="off">allowed</span> </label> </div> </div> </div> <div class="navbar-end navbar-search-wrapper"> <div class="navbar-item"> <div class="field has-addons"> <div class="autoComplete_options"> <input class="control input" id="autoComplete" type="search" dir="ltr" spellcheck=false autocorrect="off" autocomplete="off" autocapitalize="off" placeholder="🔍 Type f to search for ..."> </div> <div class="control" title="Search options"> <a class="button is-primary js-modal-trigger" data-target="options-search-info"> <span class="icon"> <i class="fas fa-cogs"></i> </span> </a> </div> </div> </div> </div> <div id="options-search-info" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <p>The last search was: <span id="selected-candidate" class="ss-selected"></span></p> <div class="control is-grouped is-grouped-centered options-search-controls"> <label class="centreToggle" title="Include extra information (Alt-E)" style="--switch-width: 10.5"> <input id="options-search-extra" type="checkbox"> <span class="text">Extra info</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>The search response can be shortened by excluding the extra information line (Alt-E)</p> <label class="centreToggle" title="Search engine type Strict/Loose (Alt-L)" style="--switch-width: 10.5"> <input id="options-search-loose" type="checkbox"> <span class="text">Search type</span> <span class="on">loose</span> <span class="off">strict</span> </label> <p> The search engine can perform a strict search (only the characters in the search box) or a loose search (Alt-L)</p> <label class="centreToggle" title="Search in headings (Alt-H)" style="--switch-width: 10.5"> <input id="options-search-headings" type="checkbox"> <span class="text">Headings</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through headings in all web-pages (Alt-H)</p> <label class="centreToggle" title="Search indexed items (Alt-I)" style="--switch-width: 10.5"> <input id="options-search-indexed" type="checkbox"> <span class="text">Indexed</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through all indexed items (Alt-I)</p> <label class="centreToggle" title="Search composite pages (Alt-C)" style="--switch-width: 10.5"> <input id="options-search-composite" type="checkbox"> <span class="text">Composite</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search in the names of composite pages, which combine similar information from the main web pages (Alt-C)</p> <label class="centreToggle" title="Search primary sources (Alt-P)" style="--switch-width: 10.5"> <input id="options-search-primary" type="checkbox"> <span class="text">Primary</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through the names of the main web pages (Alt-P)</p> <label class="centreToggle" title="Open in new tab (Alt-Q)" style="--switch-width: 10.5"> <input id="options-search-newtab" type="checkbox"> <span class="text">New tab</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Once a search candidate has been chosen, it can be opened in a new tab or in the current tab (Alt-Q)</p> <p>If all else fails, an item is added to use the Google search engine on the whole site</p> <button class="button is-warning" id="options-search-reset-defaults">Clear options, reset to defaults</button> <p>Exit this page by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> </div> <div id="download-ebook" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <p><a href="/RakuDocumentation.epub" download>RakuDocumentation.epub</a> is a work in progress e-book. It targets the <a href="https://www.w3.org/publishing/epub3/">EPUB v3 specification</a>. It needs testing on a variety of ereaders (some of which may still implicitly expect compliance with EPUB v2). The CSS definitely needs enhancing (especially for code snippets). The Ebook opens in a Calibre reader, which is available on all operating systems.</p> <p>Suggestions are welcome and should be addressed by opening an issue on the Raku/doc-website repository</p> <p>Exit this popup by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> <div id="announcement-modal" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <div id="raku-doc-announcement"></div> <p>For more see <a href="/announcements">Announcements page</a>.</p> <p>Exit this popup by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> </div> </nav> <div class="tile is-ancestor section"> <div class="page-edit"> <a class="button page-edit-button" href="https://github.com/Raku/doc/edit/main/doc/Type/Str.rakudoc" title="Edit this page. Commit: 8206e3aca 2024-09-13"> <span class="icon is-right"> <i class="fas fa-pen-alt is-medium"></i> </span> </a> </div> <div id="left-column" class="tile is-parent is-2 is-hidden"> <div id="left-col-inner"> <div class="tabs" id="tabs"> <ul> <li class="is-active" id="toc-tab"> <a>Table of Contents</a> </li> <li id="index-tab"> <a>Index</a> </li> </ul> </div> <div class="field"> <div class="control has-icons-right"> <input id="toc-filter" class="input" type="text" placeholder="Filter"> <span class="icon is-right has-text-grey"> <i class="fas fa-search is-medium"></i> </span> </div> </div> <div class="raku-sidebar"> <aside id="toc-menu" class="menu"> <ul class="menu-list"> <li><a href="#Methods">Methods</a></li> <ul> <li><a href="#routine_chop">routine chop</a></li> <li><a href="#routine_chomp">routine chomp</a></li> <li><a href="#method_contains">method contains</a></li> <li><a href="#routine_lc">routine lc</a></li> <li><a href="#routine_uc">routine uc</a></li> <li><a href="#routine_fc">routine fc</a></li> <li><a href="#routine_tc">routine tc</a></li> <li><a href="#routine_tclc">routine tclc</a></li> <li><a href="#routine_wordcase">routine wordcase</a></li> <li><a href="#method_unival">method unival</a></li> <li><a href="#method_univals">method univals</a></li> <li><a href="#routine_chars">routine chars</a></li> <li><a href="#method_encode">method encode</a></li> <li><a href="#method_index">method index</a></li> <li><a href="#routine_rindex">routine rindex</a></li> <li><a href="#method_indices">method indices</a></li> <li><a href="#method_match">method match</a></li> <li><a href="#method_Numeric">method Numeric</a></li> <li><a href="#method_Num">method Num</a></li> <li><a href="#method_Int">method Int</a></li> <li><a href="#method_Rat">method Rat</a></li> <li><a href="#method_Bool">method Bool</a></li> <li><a href="#routine_parse-base">routine parse-base</a></li> <li><a href="#routine_parse-names">routine parse-names</a></li> <li><a href="#routine_uniparse">routine uniparse</a></li> <li><a href="#method_samecase">method samecase</a></li> <li><a href="#routine_split">routine split</a></li> <li><a href="#routine_comb">routine comb</a></li> <li><a href="#routine_lines">routine lines</a></li> <li><a href="#routine_words">routine words</a></li> <li><a href="#routine_flip">routine flip</a></li> <li><a href="#method_starts-with">method starts-with</a></li> <li><a href="#method_ends-with">method ends-with</a></li> <li><a href="#method_subst">method subst</a></li> <ul> <li><a href="#Literal_replacement_substitution">Literal replacement substitution</a></li> <li><a href="#Callable">Callable</a></li> <li><a href="#Adverbs">Adverbs</a></li> <li><a href="#More_Examples">More Examples</a></li> </ul> <li><a href="#method_subst-mutate">method subst-mutate</a></li> <li><a href="#routine_substr">routine substr</a></li> <li><a href="#method_substr-eq">method substr-eq</a></li> <li><a href="#method_substr-rw">method substr-rw</a></li> <li><a href="#routine_samemark">routine samemark</a></li> <li><a href="#method_succ">method succ</a></li> <li><a href="#method_pred">method pred</a></li> <li><a href="#routine_ord">routine ord</a></li> <li><a href="#method_ords">method ords</a></li> <li><a href="#method_trans">method trans</a></li> <li><a href="#method_indent">method indent</a></li> <li><a href="#method_trim">method trim</a></li> <li><a href="#method_trim-trailing">method trim-trailing</a></li> <li><a href="#method_trim-leading">method trim-leading</a></li> <li><a href="#method_NFC">method NFC</a></li> <li><a href="#method_NFD">method NFD</a></li> <li><a href="#method_NFKC">method NFKC</a></li> <li><a href="#method_NFKD">method NFKD</a></li> <li><a href="#method_ACCEPTS">method ACCEPTS</a></li> <li><a href="#method_Capture">method Capture</a></li> <li><a href="#routine_val">routine val</a></li> <li><a href="#method_Version">method Version</a></li> <li><a href="#method_Date">method Date</a></li> <li><a href="#method_DateTime">method DateTime</a></li> </ul> </aside> <aside id="index-menu" class="menu is-hidden"> </aside> </div> </div> </div> <div id="main-column" class="tile is-parent" style="overflow-x: hidden;"> <div id="main-col-inner"> <section class="raku page-header"> <div class="container px-4"> <div class="raku page-title has-text-centered"> class Str </div> <div class="raku page-subtitle has-text-centered"> <p>String of characters</p> </div> </div> </section> <section class="raku page-content"><div class="container px-4"><div class="columns one-col"> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">class</span> <span class="highlite-TYPE">Str</span> <span class="highlite-KEYWORD">is</span> <span class="highlite-TYPE">Cool</span> <span class="highlite-KEYWORD">does</span> <span class="highlite-TYPE">Stringy</span> { }</pre> </div> </div> <p>Built-in class for strings. Objects of type <code>Str</code> are <a href="/language/faq#If_Str_is_immutable,_how_does_s///_work?_If_Int_is_immutable,_how_does_$i%2B%2B_work?">immutable</a>.</p> <h1 id="Methods" class="raku-h1"><a href="#class_Str" title="go to top of document">Methods<a class="raku-anchor" title="direct link" href="#Methods">§</a></a></h1> <h2 id="routine_chop" class="raku-h2"><a href="#class_Str" title="go to top of document">routine chop<a class="raku-anchor" title="direct link" href="#routine_chop">§</a></a></h2> <!-- defnmark routine_chop 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">chop</span>(Str:D:) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">chop</span>(Str:D: <span class="highlite-TYPE">Int</span>() <span class="highlite-NAME_SCALAR">$chopping</span>)</pre> </div> </div> <p>Returns the string with <code>$chopping</code> characters removed from the end.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Whateverable</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">chop</span>(3.6); <span class="highlite-COMMENT"># OUTPUT: «Whatevera» </span><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$string</span>= <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Whateverable</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">chop</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">3</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «Whatevera»</span></pre> </div> </div> <p>The <code>$chopping</code> positional is converted to <a href="/type/Int"><code>Int</code></a> before being applied to the string.</p> <h2 id="routine_chomp" class="raku-h2"><a href="#class_Str" title="go to top of document">routine chomp<a class="raku-anchor" title="direct link" href="#routine_chomp">§</a></a></h2> <!-- defnmark routine_chomp 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">chomp</span>(Str:D <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">chomp</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns the string with a logical newline (any codepoint that has the <code>NEWLINE</code> property) removed from the end.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">chomp</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «abc» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">def</span><span class="highlite-ESCAPE">\r</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">chomp</span>; <span class="highlite-COMMENT"># OUTPUT: «def» NOTE: \r\n is a single grapheme! </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo</span><span class="highlite-ESCAPE">\r</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">chomp</span>; <span class="highlite-COMMENT"># OUTPUT: «foo»</span></pre> </div> </div> <h2 id="method_contains" class="raku-h2"><a href="#class_Str" title="go to top of document">method contains<a class="raku-anchor" title="direct link" href="#method_contains">§</a></a></h2> <!-- defnmark method_contains 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">contains</span>(Str:D: Cool:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Bool:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">contains</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Bool:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">contains</span>(Str:D: Regex:D <span class="highlite-NAME_SCALAR">$needle</span> <span class="highlite-KEYWORD">--></span> Bool:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">contains</span>(Str:D: Cool:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Int</span>(Cool:D) <span class="highlite-NAME_SCALAR">$pos</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Bool:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">contains</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> Int:D <span class="highlite-NAME_SCALAR">$pos</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Bool:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">contains</span>(Str:D: Regex:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> Int:D <span class="highlite-NAME_SCALAR">$pos</span> <span class="highlite-KEYWORD">--></span> Bool:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">contains</span>(Str:D: Regex:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> Cool:D <span class="highlite-NAME_SCALAR">$pos</span> <span class="highlite-KEYWORD">--></span> Bool:D)</pre> </div> </div> <p>Given a <code>Str</code> invocant (known as the <em>haystack</em>) and a first argument (known as the <code>$needle</code>), it searches for the <code>$needle</code> in the <em>haystack</em> from the beginning of the string and returns <code>True</code> if <code>$needle</code> is found. If the optional parameter <code>$pos</code> is provided, then <code>contains</code> will search the <em>haystack</em> starting from <code>$pos</code> characters into the string.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Hello</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">hello</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Hello</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> 1); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">,</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">,</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> 3); <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">,</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> 10); <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <p>In the first case, <code>contains</code> searches for the <code>'Hello'</code> string on the invocant right from the start of the invocant string and returns <code>True</code>. In the third case, the <code>'Hello'</code> string is not found since we have started looking from the second position (index 1) in <code>'Hello, World'</code>.</p><p>Since Rakudo version 2020.02, the <code>$needle</code> can also be a <a href="/type/Regex"><code>Regex</code></a> in which case the <code>contains</code> method quickly returns whether the regex matches the string at least once. No <a href="/type/Match"><code>Match</code></a> objects are created, so this is relatively fast.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\w <?before '</span><span class="highlite-REGEX_LITERAL">,</span><span class="highlite-REGEX_SPECIAL">'></span><span class="highlite-REGEX_DELIMITER">/</span>); <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\w <?before '</span><span class="highlite-REGEX_LITERAL">,</span><span class="highlite-REGEX_SPECIAL">'></span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> 5); <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <p>Since Rakudo version 2020.02, if the optional named parameter <code>:ignorecase</code>, or <code>:i</code>, is specified, the search for <code>$needle</code> ignores the distinction between uppercase, lowercase, and titlecase letters.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">world</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">world</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignorecase); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Since Rakudo version 2020.02, if the optional named parameter <code>:ignoremark</code>, or <code>:m</code>, is specified, the search for <code>$needle</code> only considers base characters, and ignores additional marks such as combining accents.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ä</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ä</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignoremark); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Note that because of how a <a href="/type/List"><code>List</code></a> or <a href="/type/Array"><code>Array</code></a> is <a href="/type/List#method_Str">coerced</a> into a <code>Str</code>, the results may sometimes be surprising.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <Hello<span class="highlite-OPERATOR">,</span> World>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Hello</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <Hello<span class="highlite-OPERATOR">,</span> World>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Hello</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> 0); <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <Hello<span class="highlite-OPERATOR">,</span> World>.<span class="highlite-ROUTINE">contains</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Hello</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> 1); <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <p>See <a href="/language/traps#Lists_become_strings,_so_beware_.contains()">traps</a>.</p> <h2 id="routine_lc" class="raku-h2"><a href="#class_Str" title="go to top of document">routine lc<a class="raku-anchor" title="direct link" href="#routine_lc">§</a></a></h2> <!-- defnmark routine_lc 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">lc</span>(Str:D <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">lc</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns a lowercase version of the string.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">lc</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">A</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «"a"» </span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">A</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">lc</span>; <span class="highlite-COMMENT"># OUTPUT: «"a"»</span></pre> </div> </div> <h2 id="routine_uc" class="raku-h2"><a href="#class_Str" title="go to top of document">routine uc<a class="raku-anchor" title="direct link" href="#routine_uc">§</a></a></h2> <!-- defnmark routine_uc 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">uc</span>(Str:D <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">uc</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns an uppercase version of the string.</p> <h2 id="routine_fc" class="raku-h2"><a href="#class_Str" title="go to top of document">routine fc<a class="raku-anchor" title="direct link" href="#routine_fc">§</a></a></h2> <!-- defnmark routine_fc 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">fc</span>(Str:D <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">fc</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Does a Unicode "fold case" operation suitable for doing caseless string comparisons. (In general, the returned string is unlikely to be useful for any purpose other than comparison.)</p> <h2 id="routine_tc" class="raku-h2"><a href="#class_Str" title="go to top of document">routine tc<a class="raku-anchor" title="direct link" href="#routine_tc">§</a></a></h2> <!-- defnmark routine_tc 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">tc</span>(Str:D <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">tc</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Does a Unicode "titlecase" operation, that is changes the first character in the string to titlecase, or to uppercase if the character has no titlecase mapping.</p> <h2 id="routine_tclc" class="raku-h2"><a href="#class_Str" title="go to top of document">routine tclc<a class="raku-anchor" title="direct link" href="#routine_tclc">§</a></a></h2> <!-- defnmark routine_tclc 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">tclc</span>(Str:D <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">tclc</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Turns the first character to titlecase, and all other characters to lowercase.</p> <h2 id="routine_wordcase" class="raku-h2"><a href="#class_Str" title="go to top of document">routine wordcase<a class="raku-anchor" title="direct link" href="#routine_wordcase">§</a></a></h2> <!-- defnmark routine_wordcase 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">wordcase</span>(<span class="highlite-TYPE">Cool</span> <span class="highlite-NAME_SCALAR">$x</span> <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Str</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">wordcase</span>(Str:D <span class="highlite-NAME_SCALAR">$x</span> <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Str</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">wordcase</span>(Str:D: <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_CODE">&filter</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-NAME_CODE">&tclc</span><span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Mu</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$where</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-TYPE">True</span> <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Str</span>) </pre> </div> </div> <p>Returns a string in which <code>&filter</code> has been applied to all the words that match <code>$where</code>. By default, this means that the first letter of every word is capitalized, and all the other letters lowercased.</p> <h2 id="method_unival" class="raku-h2"><a href="#class_Str" title="go to top of document">method unival<a class="raku-anchor" title="direct link" href="#method_unival">§</a></a></h2> <!-- defnmark method_unival 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">unival</span>(Str:D: <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Numeric</span>)</pre> </div> </div> <p>Returns the numeric value that the first codepoint in the invocant represents, or <code>NaN</code> if it's not numeric.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">4</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">unival</span>; <span class="highlite-COMMENT"># OUTPUT: «4» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">¾</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">unival</span>; <span class="highlite-COMMENT"># OUTPUT: «0.75» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">unival</span>; <span class="highlite-COMMENT"># OUTPUT: «NaN»</span></pre> </div> </div> <h2 id="method_univals" class="raku-h2"><a href="#class_Str" title="go to top of document">method univals<a class="raku-anchor" title="direct link" href="#method_univals">§</a></a></h2> <!-- defnmark method_univals 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">univals</span>(Str:D: <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">List</span>)</pre> </div> </div> <p>Returns a list of numeric values represented by each codepoint in the invocant string, and <code>NaN</code> for non-numeric characters.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">4a¾</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">univals</span>; <span class="highlite-COMMENT"># OUTPUT: «(4 NaN 0.75)»</span></pre> </div> </div> <h2 id="routine_chars" class="raku-h2"><a href="#class_Str" title="go to top of document">routine chars<a class="raku-anchor" title="direct link" href="#routine_chars">§</a></a></h2> <!-- defnmark routine_chars 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">chars</span>(<span class="highlite-TYPE">Cool</span> <span class="highlite-NAME_SCALAR">$x</span> <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">chars</span>(Str:D <span class="highlite-NAME_SCALAR">$x</span> <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">chars</span>(<span class="highlite-TYPE">str</span> <span class="highlite-NAME_SCALAR">$x</span> <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">int</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">chars</span>(Str:D: <span class="highlite-KEYWORD">--></span> Int:D)</pre> </div> </div> <p>Returns the number of characters in the string in graphemes. On the JVM, this currently erroneously returns the number of codepoints instead.</p> <h2 id="method_encode" class="raku-h2"><a href="#class_Str" title="go to top of document">method encode<a class="raku-anchor" title="direct link" href="#method_encode">§</a></a></h2> <!-- defnmark method_encode 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">encode</span>(Str:D <span class="highlite-NAME_SCALAR">$encoding</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">utf8</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$replacement</span><span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Bool</span>() <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$translate-nl</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-TYPE">False</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$strict</span>)</pre> </div> </div> <p>Returns a <a href="/type/Blob"><code>Blob</code></a> which represents the original string in the given encoding and normal form. The actual return type is as specific as possible, so <code>$str.encode('UTF-8')</code> returns a <a href="/type/utf8"><code>utf8</code></a> object, <code>$str.encode('ISO-8859-1')</code> a <code>buf8</code>. If <code>:translate-nl</code> is set to <code>True</code>, it will translate newlines from <code>\n</code> to <code>\r\n</code>, but only in Windows. <code>$replacement</code> indicates how characters are going to be replaced in the case they are not available in the current encoding, while <code>$strict</code> indicates whether unmapped codepoints will still decode; for instance, codepoint 129 which does not exist in <code>windows-1252</code>.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$str</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Þor is mighty</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">encode</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ascii</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :replacement( <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Th</span><span class="highlite-STRING_DELIMITER">'</span>) ).<span class="highlite-ROUTINE">decode</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ascii</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «Thor is mighty»</span></pre> </div> </div> <p>In this case, any unknown character is going to be substituted by <code>Th</code>. We know in advance that the character that is not known in the <code>ascii</code> encoding is <code>Þ</code>, so we substitute it by its latin equivalent, <code>Th</code>. In the absence of any replacement set of characters, <code>:replacement</code> is understood as a <a href="/type/Bool"><code>Bool</code></a>:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">encode</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ascii</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :replacement).<span class="highlite-ROUTINE">decode</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ascii</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «?or is mighty» </span></pre> </div> </div> <p>If <code>:replacement</code> is not set or assigned a value, the error <code>Error encoding ASCII string: could not encode codepoint 222</code> will be issued (in this case, since þ is codepoint 222).</p><p>Since the <a href="/type/Blob"><code>Blob</code></a> returned by <code>encode</code> is the original string in normal form, and every element of a <a href="/type/Blob"><code>Blob</code></a> is a byte, you can obtain the length in bytes of a string by calling a method that returns the size of the <a href="/type/Blob"><code>Blob</code></a> on it:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">þor</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">encode</span>.<span class="highlite-ROUTINE">bytes</span>; <span class="highlite-COMMENT"># OUTPUT: «4» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">þor</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">encode</span>.<span class="highlite-ROUTINE">elems</span>; <span class="highlite-COMMENT"># OUTPUT: «4» </span></pre> </div> </div> <h2 id="method_index" class="raku-h2"><a href="#class_Str" title="go to top of document">method index<a class="raku-anchor" title="direct link" href="#method_index">§</a></a></h2> <!-- defnmark method_index 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">index</span>(Str:D: Cool:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">index</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">index</span>(Str:D: Cool:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> Cool:D <span class="highlite-NAME_SCALAR">$pos</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">index</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> Int:D <span class="highlite-NAME_SCALAR">$pos</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">index</span>(Str:D: <span class="highlite-NAME_ARRAY">@needles</span> <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">index</span>(Str:D: <span class="highlite-NAME_ARRAY">@needles</span><span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>)<span class="highlite-OPERATOR">!</span> <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">index</span>(Str:D: <span class="highlite-NAME_ARRAY">@needles</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">!</span><span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Int:D)</pre> </div> </div> <p>Searches for <code>$needle</code> in the string starting from <code>$pos</code> (if present). It returns the offset into the string where <code>$needle</code> was found, and <a href="/type/Nil"><code>Nil</code></a> if it was not found.</p><p>Since Rakudo version 2020.02, if the optional named parameter <code>:ignorecase</code>, or <code>:i</code>, is specified, the search for <code>$needle</code> ignores the distinction between uppercase, lowercase and titlecase letters. In addition, if the optional named parameter <code>:ignoremark</code>, or <code>:m</code>, is specified, the search for <code>$needle</code> only considers base characters, and ignores additional marks such as combining accents.</p><p>Since Rakudo version 2020.05, <code>index</code> accepts a list of needles to search the string with, and return the lowest index found or <a href="/type/Nil"><code>Nil</code></a>.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camelia is a butterfly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «1» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camelia is a butterfly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 2); <span class="highlite-COMMENT"># OUTPUT: «6» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camelia is a butterfly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">er</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «17» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camelia is a butterfly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camel</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «0» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camelia is a butterfly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Onion</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «Nil» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camelia is a butterfly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER"><</span><span class="highlite-STRING">a e i u</span><span class="highlite-STRING_DELIMITER">></span>); <span class="highlite-COMMENT"># OUTPUT: «1» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camelia is a butterfly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER"><</span><span class="highlite-STRING">a c</span><span class="highlite-STRING_DELIMITER">></span><span class="highlite-OPERATOR">,</span> :i); <span class="highlite-COMMENT"># OUTPUT: «0» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Camelia is a butterfly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>((<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">w</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">x</span><span class="highlite-STRING_DELIMITER">'</span>)); <span class="highlite-COMMENT"># OUTPUT: «Nil» </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">world</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «Nil» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">world</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignorecase); <span class="highlite-COMMENT"># OUTPUT: «7» </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ä</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «Nil» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ä</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignoremark); <span class="highlite-COMMENT"># OUTPUT: «0» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">index</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">x</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">defined</span> <span class="highlite-OPERATOR">??</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">OK</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">!!</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">NOT</span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-COMMENT"># OUTPUT: «NOT»</span></pre> </div> </div> <p>Other forms of <code>index</code>, including subs, are <a href="/type/Cool#routine_index">inherited from <code>Cool</code></a>.</p> <h2 id="routine_rindex" class="raku-h2"><a href="#class_Str" title="go to top of document">routine rindex<a class="raku-anchor" title="direct link" href="#routine_rindex">§</a></a></h2> <!-- defnmark routine_rindex 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">rindex</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$needle</span> <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">rindex</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> Int:D <span class="highlite-NAME_SCALAR">$pos</span> <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">rindex</span>(Str:D: <span class="highlite-NAME_ARRAY">@needles</span> <span class="highlite-KEYWORD">--></span> Int:D)</pre> </div> </div> <p>Returns the last position of <code>$needle</code> in the string not after <code>$pos</code>. Returns <a href="/type/Nil"><code>Nil</code></a> if <code>$needle</code> wasn't found.</p><p>Since Rakudo version 2020.05, <code>rindex</code> accepts a list of needles to search the string with, and return the highest index found or <a href="/type/Nil"><code>Nil</code></a>.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">aardvark</span><span class="highlite-STRING_DELIMITER">"</span>.rindex: <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «5» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">aardvark</span><span class="highlite-STRING_DELIMITER">"</span>.rindex: <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 0; <span class="highlite-COMMENT"># OUTPUT: «0 </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">aardvark</span><span class="highlite-STRING_DELIMITER">"</span>.rindex: <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">t</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «Nil» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">aardvark</span><span class="highlite-STRING_DELIMITER">"</span>.rindex: <span class="highlite-STRING_DELIMITER"><</span><span class="highlite-STRING">d v k</span><span class="highlite-STRING_DELIMITER">></span>; <span class="highlite-COMMENT"># OUTPUT: «7»</span></pre> </div> </div> <p>Other forms of <code>rindex</code>, including subs, are <a href="/type/Cool#routine_rindex">inherited from <code>Cool</code></a>.</p> <h2 id="method_indices" class="raku-h2"><a href="#class_Str" title="go to top of document">method indices<a class="raku-anchor" title="direct link" href="#method_indices">§</a></a></h2> <!-- defnmark method_indices 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">indices</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>)<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$overlap</span> <span class="highlite-KEYWORD">--></span> List:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">indices</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> Int:D <span class="highlite-NAME_SCALAR">$start</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>)<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$overlap</span> <span class="highlite-KEYWORD">--></span> List:D)</pre> </div> </div> <p>Searches for all occurrences of <code>$needle</code> in the string starting from position <code>$start</code>, or zero if it is not specified, and returns a <a href="/type/List"><code>List</code></a> with all offsets in the string where <code>$needle</code> was found, or an empty list if it was not found.</p><p>If the optional parameter <code>:overlap</code> is specified the search continues from the index directly following the previous match, otherwise the search will continue after the previous match.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">banana</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indices</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «(1 3 5)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">banana</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indices</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ana</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «(1)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">banana</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indices</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ana</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :overlap); <span class="highlite-COMMENT"># OUTPUT: «(1 3)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">banana</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indices</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ana</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 2); <span class="highlite-COMMENT"># OUTPUT: «(3)»</span></pre> </div> </div> <p>Since Rakudo version 2020.02, if the optional named parameter <code>:ignorecase</code>, or <code>:i</code>, is specified, the search for <code>$needle</code> ignores the distinction between uppercase, lowercase and titlecase letters.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">banAna</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indices</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT:«(1 5)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">banAna</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indices</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignorecase); <span class="highlite-COMMENT"># OUTPUT:«(1 3 5)»</span></pre> </div> </div> <p>Since Rakudo 2020.02, if the optional named parameter <code>:ignoremark</code>, or <code>:m</code>, is specified, the search for <code>$needle</code> only considers base characters, and ignores additional marks such as combining accents.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">tête-à-tête</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indices</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">te</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT:«(2 9)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">tête-à-tête</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indices</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">te</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignoremark); <span class="highlite-COMMENT"># OUTPUT:«(0 2 7 9)»</span></pre> </div> </div> <h2 id="method_match" class="raku-h2"><a href="#class_Str" title="go to top of document">method match<a class="raku-anchor" title="direct link" href="#method_match">§</a></a></h2> <!-- defnmark method_match 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">match</span>(<span class="highlite-NAME_SCALAR">$pat</span><span class="highlite-OPERATOR">,</span> :continue(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$c</span>)<span class="highlite-OPERATOR">,</span> :pos(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$p</span>)<span class="highlite-OPERATOR">,</span> :global(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$g</span>)<span class="highlite-OPERATOR">,</span> :overlap(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ov</span>)<span class="highlite-OPERATOR">,</span> :exhaustive(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ex</span>)<span class="highlite-OPERATOR">,</span> :st(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$nd</span>)<span class="highlite-OPERATOR">,</span> :rd(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$th</span>)<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$nth</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$x</span> <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Match</span>)</pre> </div> </div> <p>Performs a match of the string against <code>$pat</code> and returns a <a href="/type/Match"><code>Match</code></a> object if there is a successful match; it returns <code>(Any)</code> otherwise. Matches are stored in the <a href="/language/variables#index-entry-match_variable">default match variable <code>$/</code></a>. If <code>$pat</code> is not a <a href="/type/Regex"><code>Regex</code></a> object, match will coerce the argument to a Str and then perform a literal match against <code>$pat</code>.</p><p>A number of optional named parameters can be specified, which alter how the match is performed.</p> <ul class="rakudoc-item"> <li><p>:continue</p></li> </ul> <p>The <code>:continue</code> adverb takes as an argument the position where the regex should start to search. If no position is specified for <code>:c</code> it will default to 0 unless <code>$/</code> is set, in which case it defaults to <code>$/.to</code>.</p> <ul class="rakudoc-item"> <li><p>:pos</p></li> </ul> <p>Takes a position as an argument. Fails if regex cannot be matched from that position, unlike <code>:continue</code>.</p> <ul class="rakudoc-item"> <li><p>:global</p></li> </ul> <p>Instead of searching for just one match and returning a <a href="/type/Match"><code>Match</code></a> object, search for every non-overlapping match and return them in a <a href="/type/List"><code>List</code></a>.</p> <ul class="rakudoc-item"> <li><p>:overlap</p></li> </ul> <p>Finds all matches including overlapping matches, but only returns one match from each starting position.</p> <ul class="rakudoc-item"> <li><p>:exhaustive</p></li> </ul> <p>Finds all possible matches of a regex, including overlapping matches and matches that start at the same position.</p> <ul class="rakudoc-item"> <li><p>:st, :nd, :rd, :nth</p></li> </ul> <p>Returns the nth match in the string. The argument can be a <a href="/type/Numeric"><code>Numeric</code></a> or an <a href="/type/Iterable"><code>Iterable</code></a> producing monotonically increasing numbers (that is, the next produced number must be larger than the previous one). The <a href="/type/Iterable"><code>Iterable</code></a> will be lazily <a href="/language/glossary#Reify">reified</a> and if non-monotonic sequence is encountered an exception will be thrown.</p><p>If <a href="/type/Iterable"><code>Iterable</code></a> argument is provided the return value and <code>$/</code> variable will be set to a possibly-empty <a href="/type/List"><code>List</code></a> of <a href="/type/Match"><code>Match</code></a> objects.</p> <ul class="rakudoc-item"> <li><p>:x</p></li> </ul> <p>Takes as an argument the number of matches to return, stopping once the specified number of matches has been reached. The value must be a <a href="/type/Numeric"><code>Numeric</code></a> or a <a href="/type/Range"><code>Range</code></a>; other values will cause <code>.match</code> to return a <a href="/type/Failure"><code>Failure</code></a> containing an <a href="/type/X/Str/Match/x"><code>X::Str::Match::x</code></a> exception.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">properly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">perl</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «「perl」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">properly</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">p</span><span class="highlite-REGEX_SPECIAL">...</span><span class="highlite-REGEX_DELIMITER">/</span>); <span class="highlite-COMMENT"># OUTPUT: «「prop」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">1 2 3</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>([1,2,3]); <span class="highlite-COMMENT"># OUTPUT: «「1 2 3」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a1xa2</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">a</span><span class="highlite-REGEX_SPECIAL">.</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> :continue(2)); <span class="highlite-COMMENT"># OUTPUT: «「a2」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abracadabra</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_LITERAL">a</span><span class="highlite-REGEX_SPECIAL"> .* </span><span class="highlite-REGEX_LITERAL">a</span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> :exhaustive); <span class="highlite-COMMENT"># OUTPUT: «(「abracadabra」 「abracada」 「abraca」 「abra」 「acadabra」 「acada」 「aca」 「adabra」 「ada」 「abra」)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">several words here</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\w+</span><span class="highlite-REGEX_DELIMITER">/</span>,:global); <span class="highlite-COMMENT"># OUTPUT: «(「several」 「words」 「here」)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">abcdef</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">.*</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> :pos(2)); <span class="highlite-COMMENT"># OUTPUT: «「cdef」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo[bar][baz]</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">..</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> :1st); <span class="highlite-COMMENT"># OUTPUT: «「fo」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo[bar][baz]</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">..</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> :2nd); <span class="highlite-COMMENT"># OUTPUT: «「o[」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo[bar][baz]</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">..</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> :3rd); <span class="highlite-COMMENT"># OUTPUT: «「ba」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo[bar][baz]</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">..</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> :4th); <span class="highlite-COMMENT"># OUTPUT: «「r]」» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo[bar][baz]bada</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">match</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">ba</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :x(2)); <span class="highlite-COMMENT"># OUTPUT: «(「ba」 「ba」)» </span></pre> </div> </div> <h2 id="method_Numeric" class="raku-h2"><a href="#class_Str" title="go to top of document">method Numeric<a class="raku-anchor" title="direct link" href="#method_Numeric">§</a></a></h2> <!-- defnmark method_Numeric 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Numeric</span>(Str:D: <span class="highlite-KEYWORD">--></span> Numeric:D)</pre> </div> </div> <p>Coerces the string to <a href="/type/Numeric"><code>Numeric</code></a> using semantics equivalent to <a href="/routine/val">val</a> routine. <a href="/routine/fail">Fails</a> with <a href="/type/X/Str/Numeric"><code>X::Str::Numeric</code></a> if the coercion to a number cannot be done.</p><p>Only Unicode characters with property <code>Nd</code>, as well as leading and trailing whitespace are allowed, with the special case of the empty string being coerced to <code>0</code>. Synthetic codepoints (e.g. <code>"7\x[308]"</code>) are forbidden.</p><p>While <code>Nl</code> and <code>No</code> characters can be used as numeric literals in the language, their conversion via <code>Str.Numeric</code> will fail, by design; the same will happen with synthetic numerics (composed of numbers and diacritic marks). See <a href="/routine/unival">unival</a> if you need to coerce such characters to <a href="/type/Numeric"><code>Numeric</code></a>. +, - and the Unicode MINUS SIGN − are all allowed.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING"> −33</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-TYPE">Numeric</span>; <span class="highlite-COMMENT"># OUTPUT: «-33» </span></pre> </div> </div> <h2 id="method_Num" class="raku-h2"><a href="#class_Str" title="go to top of document">method Num<a class="raku-anchor" title="direct link" href="#method_Num">§</a></a></h2> <!-- defnmark method_Num 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Num</span>(Str:D: <span class="highlite-KEYWORD">--></span> Num:D)</pre> </div> </div> <p>Coerces the string to <a href="/type/Num"><code>Num</code></a>, using the same rules as <a href="/type/Str#method_Numeric"><code>Str.Numeric</code></a> and handling negative zero, <code>-0e0</code>, and positive zero, <code>0e0</code>.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-TYPE">Str</span> <span class="highlite-NAME_SCALAR">$s</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">-0/5</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> (.<span class="highlite-ROUTINE">self</span><span class="highlite-OPERATOR">,</span> .^<span class="highlite-ROUTINE">name</span>) <span class="highlite-KEYWORD">given</span> <span class="highlite-NAME_SCALAR">$s</span>.<span class="highlite-TYPE">Numeric</span>; <span class="highlite-COMMENT"># OUTPUT: «(0 Rat)» </span><span class="highlite-ROUTINE">say</span> (.<span class="highlite-ROUTINE">self</span><span class="highlite-OPERATOR">,</span> .^<span class="highlite-ROUTINE">name</span>) <span class="highlite-KEYWORD">given</span> <span class="highlite-NAME_SCALAR">$s</span>.<span class="highlite-TYPE">Num</span>; <span class="highlite-COMMENT"># OUTPUT: «(-0 Num)» </span></pre> </div> </div> <h2 id="method_Int" class="raku-h2"><a href="#class_Str" title="go to top of document">method Int<a class="raku-anchor" title="direct link" href="#method_Int">§</a></a></h2> <!-- defnmark method_Int 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Int</span>(Str:D: <span class="highlite-KEYWORD">--></span> Int:D)</pre> </div> </div> <p>Coerces the string to <a href="/type/Int"><code>Int</code></a>, using the same rules as <a href="/type/Str#method_Numeric"><code>Str.Numeric</code></a>.</p> <h2 id="method_Rat" class="raku-h2"><a href="#class_Str" title="go to top of document">method Rat<a class="raku-anchor" title="direct link" href="#method_Rat">§</a></a></h2> <!-- defnmark method_Rat 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Rat</span>(Str:D: <span class="highlite-KEYWORD">--></span> Rational:D)</pre> </div> </div> <p>Coerces the string to a <a href="/type/Rat"><code>Rat</code></a> object, using the same rules as <a href="/type/Str#method_Numeric"><code>Str.Numeric</code></a>. If the denominator is larger than 64-bits is it still kept and no degradation to <a href="/type/Num"><code>Num</code></a> occurs.</p> <h2 id="method_Bool" class="raku-h2"><a href="#class_Str" title="go to top of document">method Bool<a class="raku-anchor" title="direct link" href="#method_Bool">§</a></a></h2> <!-- defnmark method_Bool 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Bool</span>(Str:D: <span class="highlite-KEYWORD">--></span> Bool:D)</pre> </div> </div> <p>Returns <code>False</code> if the string is empty, <code>True</code> otherwise.</p> <h2 id="routine_parse-base" class="raku-h2"><a href="#class_Str" title="go to top of document">routine parse-base<a class="raku-anchor" title="direct link" href="#routine_parse-base">§</a></a></h2> <!-- defnmark routine_parse-base 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">parse-base</span>(Str:D <span class="highlite-NAME_SCALAR">$num</span><span class="highlite-OPERATOR">,</span> Int:D <span class="highlite-NAME_SCALAR">$radix</span> <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Numeric</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">parse-base</span>(Str:D <span class="highlite-NAME_SCALAR">$num:</span> Int:D <span class="highlite-NAME_SCALAR">$radix</span> <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Numeric</span>)</pre> </div> </div> <p>Performs the reverse of <a href="/routine/base"><code>base</code></a> by converting a string with a base-<code>$radix</code> number to its <a href="/type/Numeric"><code>Numeric</code></a> equivalent. Will <a href="/routine/fail"><code>fail</code></a> if radix is not in range <code>2..36</code> or if the string being parsed contains characters that are not valid for the specified base.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">1337.<span class="highlite-ROUTINE">base</span>(32).<span class="highlite-ROUTINE">parse-base</span>(32).<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «1337» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Raku</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">parse-base</span>(36).<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «1273422» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">FF.DD</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">parse-base</span>(16).<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «255.863281»</span></pre> </div> </div> <p>See also: <a href="/syntax/Number%20literals">syntax for number literals</a></p> <h2 id="routine_parse-names" class="raku-h2"><a href="#class_Str" title="go to top of document">routine parse-names<a class="raku-anchor" title="direct link" href="#routine_parse-names">§</a></a></h2> <!-- defnmark routine_parse-names 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">sub</span> <span class="highlite-ROUTINE">parse-names</span>(Str:D <span class="highlite-NAME_SCALAR">$names</span> <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">parse-names</span>(Str:D <span class="highlite-NAME_SCALAR">$names:</span> <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p><strong>DEPRECATED</strong>. Use <a href="/routine/uniparse">uniparse</a> instead. Existed in Rakudo implementation as a proof of viability implementation before being renamed and will be removed when 6.e language is released.</p> <h2 id="routine_uniparse" class="raku-h2"><a href="#class_Str" title="go to top of document">routine uniparse<a class="raku-anchor" title="direct link" href="#routine_uniparse">§</a></a></h2> <!-- defnmark routine_uniparse 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">sub</span> <span class="highlite-ROUTINE">uniparse</span>(Str:D <span class="highlite-NAME_SCALAR">$names</span> <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">uniparse</span>(Str:D <span class="highlite-NAME_SCALAR">$names:</span> <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Takes string with comma-separated Unicode names of characters and returns a string composed of those characters. Will <a href="/routine/fail"><code>fail</code></a> if any of the characters' names are empty or not recognized. Whitespace around character names is ignored.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">I </span><span class="highlite-ESCAPE">{</span><span class="highlite-ROUTINE">uniparse</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">TWO HEARTS</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-ESCAPE">}</span><span class="highlite-STRING"> Raku</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «I 💕 Raku» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">TWO HEARTS, BUTTERFLY</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">uniparse</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «💕🦋»</span></pre> </div> </div> <p>See <a href="/routine/uniname">uniname</a> and <a href="/routine/uninames">uninames</a> for routines that work in the opposite direction with a single codepoint and multiple codepoints respectively.</p><p>Note that unlike <code>\c[...]</code> construct available in string interpolation, <code>uniparse</code> does not accept decimal numerical values. Use <a href="/routine/chr">chr</a> routine to convert those:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-ESCAPE">\c</span><span class="highlite-STRING">[1337]</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «Թ» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">1337</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">chr</span>; <span class="highlite-COMMENT"># OUTPUT: «Թ»</span></pre> </div> </div> <p><em>Note:</em> before being standardized in 2017.12, this routine was known under its working name of <a href="/routine/parse-names">parse-names</a>. This denomination will be removed in the 6.e version.</p> <h2 id="method_samecase" class="raku-h2"><a href="#class_Str" title="go to top of document">method samecase<a class="raku-anchor" title="direct link" href="#method_samecase">§</a></a></h2> <!-- defnmark method_samecase 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">samecase</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$pattern</span> <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns a copy of the invocant with case information for each individual character changed according to <code>$pattern</code>.</p><p><strong>Note</strong>: The pattern string can contain three types of characters, i.e. uppercase, lowercase and caseless. For a given character in <code>$pattern</code> its case information determines the case of the corresponding character in the result.</p><p>If the invocant is longer than <code>$pattern</code>, the case information from the last character of <code>$pattern</code> is applied to the remaining characters of the invocant.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">raKu</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">samecase</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">A_a_</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «Raku» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">rAKU</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">samecase</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Ab</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «Raku»</span></pre> </div> </div> <h2 id="routine_split" class="raku-h2"><a href="#class_Str" title="go to top of document">routine split<a class="raku-anchor" title="direct link" href="#routine_split">§</a></a></h2> <!-- defnmark routine_split 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">split</span>( Str:D <span class="highlite-NAME_SCALAR">$delimiter</span><span class="highlite-OPERATOR">,</span> Str:D <span class="highlite-NAME_SCALAR">$input</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$skip-empty</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$v</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$k</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$kv</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$p</span>) </pre> </div> </div> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">split</span>(Regex:D <span class="highlite-NAME_SCALAR">$delimiter</span><span class="highlite-OPERATOR">,</span> Str:D <span class="highlite-NAME_SCALAR">$input</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$skip-empty</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$v</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$k</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$kv</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$p</span>) </pre> </div> </div> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">split</span>(List:D <span class="highlite-NAME_SCALAR">$delimiters</span><span class="highlite-OPERATOR">,</span> Str:D <span class="highlite-NAME_SCALAR">$input</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$skip-empty</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$v</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$k</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$kv</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$p</span>) </pre> </div> </div> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">split</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$delimiter</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$skip-empty</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$v</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$k</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$kv</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$p</span>) </pre> </div> </div> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">split</span>(Str:D: Regex:D <span class="highlite-NAME_SCALAR">$delimiter</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$skip-empty</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$v</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$k</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$kv</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$p</span>) </pre> </div> </div> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">split</span>(Str:D: List:D <span class="highlite-NAME_SCALAR">$delimiters</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$skip-empty</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$v</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$k</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$kv</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$p</span>) </pre> </div> </div> <p>Splits a string up into pieces based on delimiters found in the string.</p><p>If <code>DELIMITER</code> is a string, it is searched for literally and not treated as a regex. If <code>DELIMITER</code> is the empty string, it effectively returns all characters of the string separately (plus an empty string at the begin and at the end). If <code>PATTERN</code> is a regular expression, then that will be used to split up the string. If <code>DELIMITERS</code> is a list, then all of its elements will be considered a delimiter (either a string or a regular expression) to split the string on.</p><p>The optional <code>LIMIT</code> indicates in how many segments the string should be split, if possible. It defaults to <strong>Inf</strong> (or <strong>*</strong>, whichever way you look at it), which means "as many as possible". Note that specifying negative limits will not produce any meaningful results.</p><p>A number of optional named parameters can be specified, which alter the result being returned. The <code>:v</code>, <code>:k</code>, <code>:kv</code> and <code>:p</code> named parameters all perform a special action with regards to the delimiter found.</p> <ul class="rakudoc-item"> <li><p>:skip-empty</p></li> </ul> <p>If specified, do not return empty strings before or after a delimiter.</p> <ul class="rakudoc-item"> <li><p>:v</p></li> </ul> <p>Also return the delimiter. If the delimiter was a regular expression, then this will be the associated <a href="/type/Match"><code>Match</code></a> object. Since this stringifies as the delimiter string found, you can always assume it is the delimiter string if you're not interested in further information about that particular match.</p> <ul class="rakudoc-item"> <li><p>:k</p></li> </ul> <p>Also return the <strong>index</strong> of the delimiter. Only makes sense if a list of delimiters was specified: in all other cases, this will be <strong>0</strong>.</p> <ul class="rakudoc-item"> <li><p>:kv</p></li> </ul> <p>Also return both the <strong>index</strong> of the delimiter, as well as the delimiter.</p> <ul class="rakudoc-item"> <li><p>:p</p></li> </ul> <p>Also return the <strong>index</strong> of the delimiter and the delimiter as a <a href="/type/Pair"><code>Pair</code></a>.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">split</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">;</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b", "c").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">split</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">;</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :v).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", ";", "b", ";", "c").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">split</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">;</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 2).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b;c").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">split</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">;</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 2<span class="highlite-OPERATOR">,</span> :v).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", ";", "b;c").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">split</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">;</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c,d</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b", "c,d").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">split</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\</span><span class="highlite-REGEX_LITERAL">;</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c,d</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b", "c,d").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">split</span>(<span class="highlite-STRING_DELIMITER"><</span><span class="highlite-STRING">; ,</span><span class="highlite-STRING_DELIMITER">></span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c,d</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b", "c", "d").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">split</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL"><[;,]>/, "</span><span class="highlite-REGEX_LITERAL">a</span><span class="highlite-REGEX_SPECIAL">;</span><span class="highlite-REGEX_LITERAL">b</span><span class="highlite-REGEX_SPECIAL">;</span><span class="highlite-REGEX_LITERAL">c</span><span class="highlite-REGEX_SPECIAL">,</span><span class="highlite-REGEX_LITERAL">d</span><span class="highlite-REGEX_SPECIAL">").</span><span class="highlite-REGEX_LITERAL">raku</span><span class="highlite-REGEX_SPECIAL">; </span><span class="highlite-COMMENT"># OUTPUT: «("a", "b", "c", "d").Seq» </span><span class="highlite-REGEX_LITERAL">say</span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_LITERAL">split</span><span class="highlite-REGEX_SPECIAL">(<; ,>, "</span><span class="highlite-REGEX_LITERAL">a</span><span class="highlite-REGEX_SPECIAL">;</span><span class="highlite-REGEX_LITERAL">b</span><span class="highlite-REGEX_SPECIAL">;</span><span class="highlite-REGEX_LITERAL">c</span><span class="highlite-REGEX_SPECIAL">,</span><span class="highlite-REGEX_LITERAL">d</span><span class="highlite-REGEX_SPECIAL">", :</span><span class="highlite-REGEX_LITERAL">k</span><span class="highlite-REGEX_SPECIAL">).</span><span class="highlite-REGEX_LITERAL">raku</span><span class="highlite-REGEX_SPECIAL">; </span><span class="highlite-COMMENT"># OUTPUT: «("a", 0, "b", 0, "c", 1, "d").Seq» </span><span class="highlite-REGEX_LITERAL">say</span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_LITERAL">split</span><span class="highlite-REGEX_SPECIAL">(<; ,>, "</span><span class="highlite-REGEX_LITERAL">a</span><span class="highlite-REGEX_SPECIAL">;</span><span class="highlite-REGEX_LITERAL">b</span><span class="highlite-REGEX_SPECIAL">;</span><span class="highlite-REGEX_LITERAL">c</span><span class="highlite-REGEX_SPECIAL">,</span><span class="highlite-REGEX_LITERAL">d</span><span class="highlite-REGEX_SPECIAL">", :</span><span class="highlite-REGEX_LITERAL">kv</span><span class="highlite-REGEX_SPECIAL">).</span><span class="highlite-REGEX_LITERAL">raku</span><span class="highlite-REGEX_SPECIAL">; </span><span class="highlite-COMMENT"># OUTPUT: «("a", 0, ";", "b", 0, ";", "c", 1, ",", "d").Seq» </span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_LITERAL">say</span><span class="highlite-REGEX_SPECIAL"> "".</span><span class="highlite-REGEX_LITERAL">split</span><span class="highlite-REGEX_SPECIAL">("</span><span class="highlite-REGEX_LITERAL">x</span><span class="highlite-REGEX_SPECIAL">").</span><span class="highlite-REGEX_LITERAL">raku</span><span class="highlite-REGEX_SPECIAL">; </span><span class="highlite-COMMENT"># OUTPUT: «("",).Seq» </span><span class="highlite-REGEX_LITERAL">say</span><span class="highlite-REGEX_SPECIAL"> "".</span><span class="highlite-REGEX_LITERAL">split</span><span class="highlite-REGEX_SPECIAL">("</span><span class="highlite-REGEX_LITERAL">x</span><span class="highlite-REGEX_SPECIAL">", :</span><span class="highlite-REGEX_LITERAL">skip</span><span class="highlite-REGEX_SPECIAL">-</span><span class="highlite-REGEX_LITERAL">empty</span><span class="highlite-REGEX_SPECIAL">).</span><span class="highlite-REGEX_LITERAL">raku</span><span class="highlite-REGEX_SPECIAL">; </span><span class="highlite-COMMENT"># OUTPUT: «().Seq» </span><span class="highlite-REGEX_SPECIAL"> </span><span class="highlite-REGEX_LITERAL">say</span><span class="highlite-REGEX_SPECIAL"> "</span><span class="highlite-REGEX_LITERAL">abcde</span><span class="highlite-REGEX_SPECIAL">".</span><span class="highlite-REGEX_LITERAL">split</span><span class="highlite-REGEX_SPECIAL">("").</span><span class="highlite-REGEX_LITERAL">raku</span><span class="highlite-REGEX_SPECIAL">; </span><span class="highlite-COMMENT"># OUTPUT: «("", "a", "b", "c", "d", "e", "").Seq» </span><span class="highlite-REGEX_LITERAL">say</span><span class="highlite-REGEX_SPECIAL"> "</span><span class="highlite-REGEX_LITERAL">abcde</span><span class="highlite-REGEX_SPECIAL">".</span><span class="highlite-REGEX_LITERAL">split</span><span class="highlite-REGEX_SPECIAL">("",:</span><span class="highlite-REGEX_LITERAL">skip</span><span class="highlite-REGEX_SPECIAL">-</span><span class="highlite-REGEX_LITERAL">empty</span><span class="highlite-REGEX_SPECIAL">).</span><span class="highlite-REGEX_LITERAL">raku</span><span class="highlite-REGEX_SPECIAL">; </span><span class="highlite-COMMENT"># OUTPUT: «("a", "b", "c", "d", "e").Seq»</span><span class="highlite-REGEX_DELIMITER"></span></pre> </div> </div> <h2 id="routine_comb" class="raku-h2"><a href="#class_Str" title="go to top of document">routine comb<a class="raku-anchor" title="direct link" href="#routine_comb">§</a></a></h2> <!-- defnmark routine_comb 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">comb</span>(Str:D <span class="highlite-NAME_SCALAR">$matcher</span><span class="highlite-OPERATOR">,</span> Str:D <span class="highlite-NAME_SCALAR">$input</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">comb</span>(Regex:D <span class="highlite-NAME_SCALAR">$matcher</span><span class="highlite-OPERATOR">,</span> Str:D <span class="highlite-NAME_SCALAR">$input</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Bool</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$match</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">comb</span>(Int:D <span class="highlite-NAME_SCALAR">$size</span><span class="highlite-OPERATOR">,</span> Str:D <span class="highlite-NAME_SCALAR">$input</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">comb</span>(Str:D <span class="highlite-NAME_SCALAR">$input:</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">comb</span>(Str:D <span class="highlite-NAME_SCALAR">$input:</span> Str:D <span class="highlite-NAME_SCALAR">$matcher</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">comb</span>(Str:D <span class="highlite-NAME_SCALAR">$input:</span> Regex:D <span class="highlite-NAME_SCALAR">$matcher</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Bool</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$match</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">comb</span>(Str:D <span class="highlite-NAME_SCALAR">$input:</span> Int:D <span class="highlite-NAME_SCALAR">$size</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf)</pre> </div> </div> <p>Searches for <code>$matcher</code> in <code>$input</code> and returns a <a href="/type/Seq"><code>Seq</code></a> of non-overlapping matches limited to at most <code>$limit</code> matches.</p><p>If <code>$matcher</code> is a Regex, each <a href="/type/Match"><code>Match</code></a> object is converted to a <code>Str</code>, unless <code>$match</code> is set (available as of the 2020.01 release of the Rakudo compiler).</p><p>If no matcher is supplied, a Seq of characters in the string is returned, as if the matcher was <code>rx/./</code>.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">comb</span>.<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b", "c").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">comb</span>(:match).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «(「a」 「b」 「c」)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">abcdefghijk</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">comb</span>(3).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("abc", "def", "ghi", "jk").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">abcdefghijk</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">comb</span>(3<span class="highlite-OPERATOR">,</span> 2).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("abc", "def").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">comb</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\w</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b", "c").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">comb</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\N</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", ";", "b", ";", "c").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">comb</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\w</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 2).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">comb</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\w\</span><span class="highlite-REGEX_LITERAL">;</span><span class="highlite-REGEX_SPECIAL">\w</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a;b;c</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 2).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a;b",).Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">comb</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">.<(.)>/, "<>[]()").raku; </span><span class="highlite-COMMENT"># OUTPUT: «(">", "]", ")").Seq»</span><span class="highlite-REGEX_DELIMITER"></span></pre> </div> </div> <p>If the matcher is an integer value, <code>comb</code> behaves as if the matcher was <code>rx/ . ** {1..$matcher} /</code>, but which is optimized to be much faster.</p><p>Note that a Regex matcher may control which portion of the matched text is returned by using features which explicitly set the top-level capture.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">comb</span>(Pair:D <span class="highlite-NAME_SCALAR">$rotor</span><span class="highlite-OPERATOR">,</span> Str:D <span class="highlite-NAME_SCALAR">$input</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Bool</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$partial</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">comb</span>(Str:D <span class="highlite-NAME_SCALAR">$input:</span> Pair:D <span class="highlite-NAME_SCALAR">$rotor</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$limit</span> <span class="highlite-OPERATOR">=</span> Inf<span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Bool</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$partial</span>)</pre> </div> </div> <p>Available as of 6.e language version (early implementation exists in Rakudo compiler 2022.12+). The <code>rotor</code> pair indicates the number of characters to fetch as the key (the "size"), and the number of "steps" forward to take afterwards. Its main intended use is to provide a way to create <a href="https://en.wikipedia.org/wiki/N-gram">N-grams</a> from strings in an efficient manner. By default only strings of the specified size will be produced. This can be overridden by specifying the named argument <code>:partial</code> with a true value.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcde</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">comb</span>(3 <span class="highlite-OPERATOR">=></span> -2); <span class="highlite-COMMENT"># OUTPUT: «(abc bcd cde)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcde</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">comb</span>(3 <span class="highlite-OPERATOR">=></span> -2<span class="highlite-OPERATOR">,</span> :partial); <span class="highlite-COMMENT"># OUTPUT: «(abc bcd cde de e)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcdefg</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">comb</span>(3 <span class="highlite-OPERATOR">=></span> -2<span class="highlite-OPERATOR">,</span> 2); <span class="highlite-COMMENT"># OUTPUT: «(abc bcd)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">comb</span>(3 <span class="highlite-OPERATOR">=></span> -2<span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcde</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «(abc bcd cde)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">comb</span>(5 <span class="highlite-OPERATOR">=></span> -2<span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcde</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :partial); <span class="highlite-COMMENT"># OUTPUT: «(abc bcd cde de e)» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">comb</span>(5 <span class="highlite-OPERATOR">=></span> -2<span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcdefg</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 2); <span class="highlite-COMMENT"># OUTPUT: «(abc bcd)»</span></pre> </div> </div> <h2 id="routine_lines" class="raku-h2"><a href="#class_Str" title="go to top of document">routine lines<a class="raku-anchor" title="direct link" href="#routine_lines">§</a></a></h2> <!-- defnmark routine_lines 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">lines</span>(Str:D: <span class="highlite-NAME_SCALAR">$limit</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$chomp</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-TYPE">True</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">lines</span>(Str:D: <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$chomp</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-TYPE">True</span>)</pre> </div> </div> <p>Returns a list of lines. By default, it chomps line endings the same as a call to <code>$input.comb( / ^^ \N* /, $limit )</code> would. To keep line endings, set the optional named parameter <code>$chomp</code> to <code>False</code>.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">lines</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING">b</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">lines</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING">b</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">elems</span>; <span class="highlite-COMMENT"># OUTPUT: «2» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING">b</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">lines</span>.<span class="highlite-ROUTINE">elems</span>; <span class="highlite-COMMENT"># OUTPUT: «2» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">lines</span>.<span class="highlite-ROUTINE">elems</span>; <span class="highlite-COMMENT"># OUTPUT: «1» </span> <span class="highlite-COMMENT"># Keep line endings </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">lines</span>(<span class="highlite-OPERATOR">:</span>!<span class="highlite-ROUTINE">chomp</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING">b</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a\n", "b").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">lines</span>(<span class="highlite-OPERATOR">:</span>!<span class="highlite-ROUTINE">chomp</span>).<span class="highlite-ROUTINE">elems</span>; <span class="highlite-COMMENT"># OUTPUT: «1»</span></pre> </div> </div> <p>You can limit the number of lines returned by setting the <code>$limit</code> variable to a non-zero, non-<code>Infinity</code> value:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <<span class="highlite-OPERATOR">not</span> there yet>.<span class="highlite-ROUTINE">join</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">lines</span>( 2 ); <span class="highlite-COMMENT"># OUTPUT: «(not there)»</span></pre> </div> </div> <p><strong>DEPRECATED as of <code>6.d</code> language</strong>, the <code>:count</code> argument was used to return the total number of lines:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <<span class="highlite-OPERATOR">not</span> there yet>.<span class="highlite-ROUTINE">join</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">lines</span>( :count ); <span class="highlite-COMMENT"># OUTPUT: «3»</span></pre> </div> </div> <p>Use <a href="/routine/elems">elems</a> call on the returned <a href="/type/Seq"><code>Seq</code></a> instead:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <<span class="highlite-OPERATOR">not</span> there yet>.<span class="highlite-ROUTINE">join</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">lines</span>.<span class="highlite-ROUTINE">elems</span>; <span class="highlite-COMMENT"># OUTPUT: «3»</span></pre> </div> </div> <h2 id="routine_words" class="raku-h2"><a href="#class_Str" title="go to top of document">routine words<a class="raku-anchor" title="direct link" href="#routine_words">§</a></a></h2> <!-- defnmark routine_words 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">words</span>(Str:D: <span class="highlite-NAME_SCALAR">$limit</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">words</span>(Str:D:)</pre> </div> </div> <p>Returns a list of non-whitespace bits, i.e. the same as a call to <code>$input.comb( / \S+ /, $limit )</code> would.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING">b</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">words</span>.<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("a", "b").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">hello world</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">words</span>.<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("hello", "world").Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo:bar</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">words</span>.<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("foo:bar",).Seq» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo:bar</span><span class="highlite-ESCAPE">\t</span><span class="highlite-STRING">baz</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">words</span>.<span class="highlite-ROUTINE">raku</span>; <span class="highlite-COMMENT"># OUTPUT: «("foo:bar", "baz").Seq»</span></pre> </div> </div> <p>It can also be used as a subroutine, turning the first argument into the invocant. <code>$limit</code> is optional, but if it is provided (and not equal to <code>Inf</code>), it will return only the first <code>$limit</code> words.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">words</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">I will be very brief here</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 2); <span class="highlite-COMMENT"># OUTPUT: «(I will)»</span></pre> </div> </div> <h2 id="routine_flip" class="raku-h2"><a href="#class_Str" title="go to top of document">routine flip<a class="raku-anchor" title="direct link" href="#routine_flip">§</a></a></h2> <!-- defnmark routine_flip 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">flip</span>(Str:D <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">flip</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns the string reversed character by character.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Raku</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">flip</span>; <span class="highlite-COMMENT"># OUTPUT: «ukaR» </span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ABBA</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">flip</span>; <span class="highlite-COMMENT"># OUTPUT: «ABBA»</span></pre> </div> </div> <h2 id="method_starts-with" class="raku-h2"><a href="#class_Str" title="go to top of document">method starts-with<a class="raku-anchor" title="direct link" href="#method_starts-with">§</a></a></h2> <!-- defnmark method_starts-with 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">starts-with</span>(Str:D: <span class="highlite-TYPE">Str</span>(<span class="highlite-TYPE">Cool</span>) <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Bool:D)</pre> </div> </div> <p>Returns <code>True</code> if the invocant is identical to or starts with <code>$needle</code>.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">starts-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">https://raku.org/</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">starts-with</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">ftp</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <p>Since Rakudo version 2020.02, if the optional named parameter <code>:ignorecase</code>, or <code>:i</code>, is specified, the comparison of the invocant and <code>$needle</code> ignores the distinction between uppercase, lowercase and titlecase letters.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">starts-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">hello</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">starts-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">hello</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignorecase); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Since Rakudo 2020.02, if the optional named parameter <code>:ignoremark</code>, or <code>:m</code>, is specified, the comparison of the invocant and <code>$needle</code> only considers base characters, and ignores additional marks such as combining accents.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">starts-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ä</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">starts-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ä</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignoremark); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <h2 id="method_ends-with" class="raku-h2"><a href="#class_Str" title="go to top of document">method ends-with<a class="raku-anchor" title="direct link" href="#method_ends-with">§</a></a></h2> <!-- defnmark method_ends-with 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">ends-with</span>(Str:D: <span class="highlite-TYPE">Str</span>(<span class="highlite-TYPE">Cool</span>) <span class="highlite-NAME_SCALAR">$needle</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> Bool:D)</pre> </div> </div> <p>Returns <code>True</code> if the invocant is identical to or ends with <code>$needle</code>.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">ends-with</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Hello</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">ends-with</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">ld</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Since Rakudo version 2020.02, if the optional named parameter <code>:ignorecase</code>, or <code>:i</code>, is specified, the comparison of the invocant and <code>$needle</code> ignores the distinction between uppercase, lowercase and titlecase letters.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">ends-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">world</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hello, World</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">ends-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">world</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignorecase); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Since Rakudo 2020.02, if the optional named parameter <code>:ignoremark</code>, or <code>:m</code>, is specified, the comparison of the invocant and <code>$needle</code> only considers base characters, and ignores additional marks such as combining accents.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">ends-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ç</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">ends-with</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ç</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :ignoremark); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <h2 id="method_subst" class="raku-h2"><a href="#class_Str" title="go to top of document">method subst<a class="raku-anchor" title="direct link" href="#method_subst">§</a></a></h2> <!-- defnmark method_subst 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">subst</span>(Str:D: <span class="highlite-NAME_SCALAR">$matcher</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$replacement</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">*</span><span class="highlite-NAME_HASH">%options</span>)</pre> </div> </div> <p>Returns the invocant string where <code>$matcher</code> is replaced by <code>$replacement</code> (or the original string, if no match was found). If no <code>$replacement</code> is provided, the empty string is used (i.e., matched string(s) are removed).</p><p>There is an in-place syntactic variant of <code>subst</code> spelled <code>s/matcher/replacement/</code> and with adverb following the <code>s</code> or inside the matcher.</p><p><code>$matcher</code> can be a <a href="/type/Regex"><code>Regex</code></a>, or a literal <code>Str</code>. Non-Str matcher arguments of type <a href="/type/Cool"><code>Cool</code></a> are coerced to <code>Str</code> for literal matching. If a <a href="/type/Regex"><code>Regex</code></a> <code>$matcher</code> is used, the <a href="/syntax/$$SOLIDUS"><code>$/</code> special variable</a> will be set to <a href="/type/Nil"><code>Nil</code></a> (if no matches occurred), a <a href="/type/Match"><code>Match</code></a> object, or a <a href="/type/List"><code>List</code></a> of <a href="/type/Match"><code>Match</code></a> objects (if multi-match options like <code>:g</code> are used).</p> <h3 id="Literal_replacement_substitution" class="raku-h3"><a href="#class_Str" title="go to top of document">Literal replacement substitution<a class="raku-anchor" title="direct link" href="#Literal_replacement_substitution">§</a></a></h3> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$some-string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Some foo</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$another-string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-NAME_SCALAR">$some-string</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">string</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># gives 'Some string' </span><span class="highlite-NAME_SCALAR">$some-string</span>.=<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">string</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># in-place substitution. $some-string is now 'Some string' </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">multi-hyphenate</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">-</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «multihyphenate»</span></pre> </div> </div> <h3 id="Callable" class="raku-h3"><a href="#class_Str" title="go to top of document">Callable<a class="raku-anchor" title="direct link" href="#Callable">§</a></a></h3> <p>The replacement can be a <a href="/type/Callable"><code>Callable</code></a> in which the current <a href="/type/Match"><code>Match</code></a> object will be placed in the <code>$/</code> variable, as well as the <code>$_</code> topic variable. Using a <a href="/type/Callable"><code>Callable</code></a> as replacement is how you can refer to any of the captures created in the regex:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-COMMENT"># Using capture from $/ variable (the $0 is the first positional capture) </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">abc123defg</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">(\d+)</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> { <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING"> before </span><span class="highlite-NAME_SCALAR">$0</span><span class="highlite-STRING"> after </span><span class="highlite-STRING_DELIMITER">"</span> }); <span class="highlite-COMMENT"># OUTPUT: «abc before 123 after defg» </span> <span class="highlite-COMMENT"># Using capture from $/ variable (the $<foo> is a named capture) </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">abc123defg</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">$<foo>=\d+</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> { <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING"> before $<foo> after </span><span class="highlite-STRING_DELIMITER">"</span> }); <span class="highlite-COMMENT"># OUTPUT: «abc before 123 after defg» </span> <span class="highlite-COMMENT"># Using WhateverCode to operate on the Match given in $_: </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">abc123defg</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">(\d+)</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">[ </span><span class="highlite-STRING_DELIMITER">"</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-OPERATOR">*</span>.<span class="highlite-ROUTINE">flip</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING"> ]</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «abc[ 321 ]defg» </span> <span class="highlite-COMMENT"># Using a Callable to generate substitution without involving current Match: </span><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$i</span> <span class="highlite-OPERATOR">=</span> 41; <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$str</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">The answer is secret.</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">secret</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> {<span class="highlite-OPERATOR">++</span><span class="highlite-NAME_SCALAR">$i</span>}); <span class="highlite-COMMENT"># The answer to everything </span><span class="highlite-COMMENT"># OUTPUT: «The answer is 42.»</span></pre> </div> </div> <h3 id="Adverbs" class="raku-h3"><a href="#class_Str" title="go to top of document">Adverbs<a class="raku-anchor" title="direct link" href="#Adverbs">§</a></a></h3> <p>The following adverbs are supported</p><table class="table is-bordered centered pod-table"> <thead> <tr><th>short</th><th>long</th><th>meaning</th></tr> </thead> <tbody> <tr><td>:g</td><td>:global</td><td>tries to match as often as possible</td></tr> <tr><td>:nth(Int|Callable|Whatever)</td><td></td><td>only substitute the nth match; aliases: :st, :nd, :rd, and :th</td></tr> <tr><td>:ss</td><td>:samespace</td><td>preserves whitespace on substitution</td></tr> <tr><td>:ii</td><td>:samecase</td><td>preserves case on substitution</td></tr> <tr><td>:mm</td><td>:samemark</td><td>preserves character marks (e.g. 'ü' replaced with 'o' will result in 'ö')</td></tr> <tr><td>:x(Int|Range|Whatever)</td><td></td><td>substitute exactly $x matches</td></tr> </tbody> </table> <p>Note that only in the <code>s///</code> form <code>:ii</code> implies <code>:i</code> and <code>:ss</code> implies <code>:s</code>. In the method form, the <code>:s</code> and <code>:i</code> modifiers must be added to the regex, not the <code>subst</code> method call.</p> <h3 id="More_Examples" class="raku-h3"><a href="#class_Str" title="go to top of document">More Examples<a class="raku-anchor" title="direct link" href="#More_Examples">§</a></a></h3> <p>Here are other examples of usage:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$str</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Hey foo foo foo</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :g); <span class="highlite-COMMENT"># OUTPUT: «Hey bar bar bar» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">\s+</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> :g); <span class="highlite-COMMENT"># OUTPUT: «Heyfoofoofoo» </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :x(0)); <span class="highlite-COMMENT"># OUTPUT: «Hey foo foo foo» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :x(1)); <span class="highlite-COMMENT"># OUTPUT: «Hey bar foo foo» </span><span class="highlite-COMMENT"># Can not match 4 times, so no substitutions made </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :x(4)); <span class="highlite-COMMENT"># OUTPUT: «Hey foo foo foo» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :x(2..4)); <span class="highlite-COMMENT"># OUTPUT: «Hey bar bar bar» </span><span class="highlite-COMMENT"># Replace all of them, identical to :g </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :x(<span class="highlite-OPERATOR">*</span>)); <span class="highlite-COMMENT"># OUTPUT: «Hey bar bar bar» </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :nth(3)); <span class="highlite-COMMENT"># OUTPUT: «Hey foo foo bar» </span><span class="highlite-COMMENT"># Replace last match </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :nth(<span class="highlite-OPERATOR">*</span>)); <span class="highlite-COMMENT"># OUTPUT: «Hey foo foo bar» </span><span class="highlite-COMMENT"># Replace next-to-last last match </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$str</span>.<span class="highlite-ROUTINE">subst</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> :nth(*-1)); <span class="highlite-COMMENT"># OUTPUT: «Hey foo bar foo»</span></pre> </div> </div> <p>The <code>:nth</code> adverb has readable English-looking variants:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">ooooo</span><span class="highlite-STRING_DELIMITER">'</span>.subst: <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">o</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">x</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :1st; <span class="highlite-COMMENT"># OUTPUT: «xoooo» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">ooooo</span><span class="highlite-STRING_DELIMITER">'</span>.subst: <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">o</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">x</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :2nd; <span class="highlite-COMMENT"># OUTPUT: «oxooo» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">ooooo</span><span class="highlite-STRING_DELIMITER">'</span>.subst: <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">o</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">x</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :3rd; <span class="highlite-COMMENT"># OUTPUT: «ooxoo» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">ooooo</span><span class="highlite-STRING_DELIMITER">'</span>.subst: <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">o</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">x</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :4th; <span class="highlite-COMMENT"># OUTPUT: «oooxo»</span></pre> </div> </div> <h2 id="method_subst-mutate" class="raku-h2"><a href="#class_Str" title="go to top of document">method subst-mutate<a class="raku-anchor" title="direct link" href="#method_subst-mutate">§</a></a></h2> <!-- defnmark method_subst-mutate 2 --> <p><strong>NOTE:</strong> <em><code>.subst-mutate</code> is deprecated in the 6.d version, and will be removed in future ones. You can use <a href="/routine/subst">subst</a> with <a href="/routine/.="><code>.=</code> method call assignment operator</a> or <a href="/language/operators#s///_in-place_substitution"><code>s///</code> substitution operator</a> instead. </em></p><p>Where <a href="/routine/subst">subst</a> returns the modified string and leaves the original unchanged, it is possible to mutate the original string by using <code>subst-mutate</code>. If the match is successful, the method returns a <a href="/type/Match"><code>Match</code></a> object representing the successful match, otherwise returns <a href="/type/Nil"><code>Nil</code></a>. If <code>:nth</code> (or one of its aliases) with <a href="/type/Iterable"><code>Iterable</code></a> value, <code>:g</code>, <code>:global</code>, or <code>:x</code> arguments are used, returns a <a href="/type/List"><code>List</code></a> of <a href="/type/Match"><code>Match</code></a> objects, or an empty <a href="/type/List"><code>List</code></a> if no matches occurred.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$some-string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Some foo</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$match</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-NAME_SCALAR">$some-string</span>.<span class="highlite-ROUTINE">subst-mutate</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_LITERAL">foo</span><span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">string</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$some-string</span>; <span class="highlite-COMMENT"># OUTPUT: «Some string» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$match</span>; <span class="highlite-COMMENT"># OUTPUT: «「foo」» </span><span class="highlite-NAME_SCALAR">$some-string</span>.<span class="highlite-ROUTINE">subst-mutate</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL"><[oe]>/, '', :</span><span class="highlite-REGEX_LITERAL">g</span><span class="highlite-REGEX_SPECIAL">); </span><span class="highlite-COMMENT"># remove every o and e, notice the :g named argument from .subst</span><span class="highlite-REGEX_DELIMITER"></span></pre> </div> </div> <p>If a <a href="/type/Regex"><code>Regex</code></a> <code>$matcher</code> is used, the <a href="/syntax/$$SOLIDUS"><code>$/</code> special variable</a> will be set to <a href="/type/Nil"><code>Nil</code></a> (if no matches occurred), a <a href="/type/Match"><code>Match</code></a> object, or a <a href="/type/List"><code>List</code></a> of <a href="/type/Match"><code>Match</code></a> objects (if multi-match options like <code>:g</code> are used).</p> <h2 id="routine_substr" class="raku-h2"><a href="#class_Str" title="go to top of document">routine substr<a class="raku-anchor" title="direct link" href="#routine_substr">§</a></a></h2> <!-- defnmark routine_substr 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">substr</span>(Str:D <span class="highlite-NAME_SCALAR">$s</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$from</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$chars</span>? <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">substr</span>(Str:D <span class="highlite-NAME_SCALAR">$s</span><span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Range</span> <span class="highlite-NAME_SCALAR">$from-to</span> <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">substr</span>(Str:D <span class="highlite-NAME_SCALAR">$s:</span> <span class="highlite-NAME_SCALAR">$from</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$chars</span>? <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">substr</span>(Str:D <span class="highlite-NAME_SCALAR">$s:</span> <span class="highlite-TYPE">Range</span> <span class="highlite-NAME_SCALAR">$from-to</span> <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns a substring of the original string, between the indices specified by <code>$from-to</code>'s endpoints (coerced to <a href="/type/Int"><code>Int</code></a>) or from index <code>$from</code> and of length <code>$chars</code>.</p><p>Both <code>$from</code> and <code>$chars</code> can be specified as <a href="/type/Callable"><code>Callable</code></a>, which will be invoked with the <a href="/routine/chars">length</a> of the original string and the returned value will be used as the value for the argument. If <code>$from</code> or <code>$chars</code> are not <a href="/type/Callable"><code>Callable</code></a>, they'll be coerced to <a href="/type/Int"><code>Int</code></a>.</p><p>If <code>$chars</code> is omitted or is larger than the available characters, the string from <code>$from</code> until the end of the string is returned. If <code>$from-to</code>'s starting index or <code>$from</code> is less than zero, <a href="/type/X/OutOfRange"><code>X::OutOfRange</code></a> exception is thrown. The <code>$from-to</code>'s ending index is permitted to extend past the end of string, in which case it will be equivalent to the index of the last character.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">substr</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Long string</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 3..6); <span class="highlite-COMMENT"># OUTPUT: «g st» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">substr</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Long string</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 6<span class="highlite-OPERATOR">,</span> 3); <span class="highlite-COMMENT"># OUTPUT: «tri» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">substr</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Long string</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 6); <span class="highlite-COMMENT"># OUTPUT: «tring» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">substr</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Long string</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 6<span class="highlite-OPERATOR">,</span> *-1); <span class="highlite-COMMENT"># OUTPUT: «trin» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">substr</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Long string</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> *-3<span class="highlite-OPERATOR">,</span> *-1); <span class="highlite-COMMENT"># OUTPUT: «in»</span></pre> </div> </div> <h2 id="method_substr-eq" class="raku-h2"><a href="#class_Str" title="go to top of document">method substr-eq<a class="raku-anchor" title="direct link" href="#method_substr-eq">§</a></a></h2> <!-- defnmark method_substr-eq 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">substr-eq</span>(Str:D: <span class="highlite-TYPE">Str</span>(<span class="highlite-TYPE">Cool</span>) <span class="highlite-NAME_SCALAR">$test-string</span><span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Int</span>(<span class="highlite-TYPE">Cool</span>) <span class="highlite-NAME_SCALAR">$from</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Bool</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">substr-eq</span>(Cool:D: <span class="highlite-TYPE">Str</span>(<span class="highlite-TYPE">Cool</span>) <span class="highlite-NAME_SCALAR">$test-string</span><span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Int</span>(<span class="highlite-TYPE">Cool</span>) <span class="highlite-NAME_SCALAR">$from</span><span class="highlite-OPERATOR">,</span> :i(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignorecase</span>)<span class="highlite-OPERATOR">,</span> :m(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$ignoremark</span>) <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Bool</span>)</pre> </div> </div> <p>Returns <code>True</code> if the <code>$test-string</code> exactly matches the <code>String</code> object, starting from the given initial index <code>$from</code>. For example, beginning with the string <code>"foobar"</code>, the substring <code>"bar"</code> will match from index 3:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foobar</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">substr-eq</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 3); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>However, the substring <code>"barz"</code> starting from index 3 won't match even though the first three letters of the substring do match:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foobar</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">substr-eq</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">barz</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 3); <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <p>Naturally, to match the entire string, one merely matches from index 0:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foobar</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">substr-eq</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foobar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 0); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Since Rakudo version 2020.02, if the optional named parameter <code>:ignorecase</code>, or <code>:i</code>, is specified, the comparison of the invocant and <code>$test-string</code> ignores the distinction between uppercase, lowercase and titlecase letters.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foobar</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">substr-eq</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 3); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foobar</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">substr-eq</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">Bar</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 3<span class="highlite-OPERATOR">,</span> :ignorecase); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Since Rakudo version 2020.02, if the optional named parameter <code>:ignoremark</code>, or <code>:m</code>, is specified, the comparison of the invocant and <code>$test-string</code> only considers base characters, and ignores additional marks such as combining accents.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">cliché</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">substr-eq</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">che</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 3); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">cliché</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">substr-eq</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">che</span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-OPERATOR">,</span> 3<span class="highlite-OPERATOR">,</span> :ignoremark); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Since this method is inherited from the <a href="/type/Cool"><code>Cool</code></a> type, it also works on integers. Thus the integer <code>42</code> will match the value <code>342</code> starting from index 1:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$integer</span> <span class="highlite-OPERATOR">=</span> 342; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$integer</span>.<span class="highlite-ROUTINE">substr-eq</span>(42<span class="highlite-OPERATOR">,</span> 1); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>As expected, one can match the entire value by starting at index 0:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$integer</span> <span class="highlite-OPERATOR">=</span> 342; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$integer</span>.<span class="highlite-ROUTINE">substr-eq</span>(342<span class="highlite-OPERATOR">,</span> 0); <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <p>Also using a different value or an incorrect starting index won't match:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$integer</span> <span class="highlite-OPERATOR">=</span> 342; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$integer</span>.<span class="highlite-ROUTINE">substr-eq</span>(42<span class="highlite-OPERATOR">,</span> 3); <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$integer</span>.<span class="highlite-ROUTINE">substr-eq</span>(7342<span class="highlite-OPERATOR">,</span> 0); <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <h2 id="method_substr-rw" class="raku-h2"><a href="#class_Str" title="go to top of document">method substr-rw<a class="raku-anchor" title="direct link" href="#method_substr-rw">§</a></a></h2> <!-- defnmark method_substr-rw 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">substr-rw</span>(<span class="highlite-NAME_SCALAR">$from</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$length</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-OPERATOR">*</span>)</pre> </div> </div> <p>A version of <code>substr</code> that returns a <a href="/type/Proxy"><code>Proxy</code></a> functioning as a writable reference to a part of a string variable. Its first argument, <code>$from</code> specifies the index in the string from which a substitution should occur, and its last argument, <code>$length</code> specifies how many characters are to be replaced. If not specified, <code>$length</code> defaults to the length of the string.</p><p>For example, in its method form, if one wants to take the string <code>"abc"</code> and replace the second character (at index 1) with the letter <code>"z"</code>, then one does this:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">substr-rw</span>(1<span class="highlite-OPERATOR">,</span> 1) <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">z</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «azc»</span></pre> </div> </div> <p>Note that new characters can be inserted as well:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">azc</span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">substr-rw</span>(2<span class="highlite-OPERATOR">,</span> 0) <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">-Zorro-</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># insert new characters BEFORE the character at index 2 </span><span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «az-Zorro-c»</span></pre> </div> </div> <p><code>substr-rw</code> also has a function form, so the above examples can also be written like so:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-ROUTINE">substr-rw</span>(<span class="highlite-NAME_SCALAR">$string</span><span class="highlite-OPERATOR">,</span> 1<span class="highlite-OPERATOR">,</span> 1) <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">z</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «azc» </span><span class="highlite-ROUTINE">substr-rw</span>(<span class="highlite-NAME_SCALAR">$string</span><span class="highlite-OPERATOR">,</span> 2<span class="highlite-OPERATOR">,</span> 0) <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">-Zorro-</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «az-Zorro-c»</span></pre> </div> </div> <p>It is also possible to alias the writable reference returned by <code>substr-rw</code> for repeated operations:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$string</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">A character in the 'Flintstones' is: barney</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-NAME_SCALAR">$string</span> <span class="highlite-OPERATOR">~~</span> <span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL">(</span><span class="highlite-REGEX_LITERAL">barney</span><span class="highlite-REGEX_SPECIAL">)</span><span class="highlite-REGEX_DELIMITER">/</span>; <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$ref</span> <span class="highlite-OPERATOR">:=</span> <span class="highlite-ROUTINE">substr-rw</span>(<span class="highlite-NAME_SCALAR">$string</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$0</span>.<span class="highlite-ROUTINE">from</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$0</span>.to-<span class="highlite-NAME_SCALAR">$0</span>.<span class="highlite-ROUTINE">from</span>); <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «A character in the 'Flintstones' is: barney» </span><span class="highlite-NAME_SCALAR">$ref</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">fred</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «A character in the 'Flintstones' is: fred» </span><span class="highlite-NAME_SCALAR">$ref</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">wilma</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-NAME_SCALAR">$string</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «A character in the 'Flintstones' is: wilma»</span></pre> </div> </div> <h2 id="routine_samemark" class="raku-h2"><a href="#class_Str" title="go to top of document">routine samemark<a class="raku-anchor" title="direct link" href="#routine_samemark">§</a></a></h2> <!-- defnmark routine_samemark 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">samemark</span>(Str:D <span class="highlite-NAME_SCALAR">$string</span><span class="highlite-OPERATOR">,</span> Str:D <span class="highlite-NAME_SCALAR">$pattern</span> <span class="highlite-KEYWORD">--></span> Str:D) <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">samemark</span>(Str:D: Str:D <span class="highlite-NAME_SCALAR">$pattern</span> <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns a copy of <code>$string</code> with the mark/accent information for each character changed such that it matches the mark/accent of the corresponding character in <code>$pattern</code>. If <code>$string</code> is longer than <code>$pattern</code>, the remaining characters in <code>$string</code> receive the same mark/accent as the last character in <code>$pattern</code>. If <code>$pattern</code> is empty no changes will be made.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">åäö</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">samemark</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">aäo</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «aäo» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">åäö</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">samemark</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «aao» </span> <span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">samemark</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Räku</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «Raku» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">samemark</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">aöä</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «aöä»</span></pre> </div> </div> <h2 id="method_succ" class="raku-h2"><a href="#class_Str" title="go to top of document">method succ<a class="raku-anchor" title="direct link" href="#method_succ">§</a></a></h2> <!-- defnmark method_succ 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">succ</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns the string incremented by one.</p><p>String increment is "magical". It searches for the last alphanumeric sequence that is not preceded by a dot, and increments it.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">12.34</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">succ</span>; <span class="highlite-COMMENT"># OUTPUT: «13.34» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">img001.png</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">succ</span>; <span class="highlite-COMMENT"># OUTPUT: «img002.png»</span></pre> </div> </div> <p>The actual increment step works by mapping the last alphanumeric character to a character range it belongs to, and choosing the next character in that range, carrying to the previous letter on overflow.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">aa</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">succ</span>; <span class="highlite-COMMENT"># OUTPUT: «ab» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">az</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">succ</span>; <span class="highlite-COMMENT"># OUTPUT: «ba» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">109</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">succ</span>; <span class="highlite-COMMENT"># OUTPUT: «110» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">α</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">succ</span>; <span class="highlite-COMMENT"># OUTPUT: «β» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a9</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">succ</span>; <span class="highlite-COMMENT"># OUTPUT: «b0»</span></pre> </div> </div> <p>String increment is Unicode-aware, and generally works for scripts where a character can be uniquely classified as belonging to one range of characters.</p> <h2 id="method_pred" class="raku-h2"><a href="#class_Str" title="go to top of document">method pred<a class="raku-anchor" title="direct link" href="#method_pred">§</a></a></h2> <!-- defnmark method_pred 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">pred</span>(Str:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns the string decremented by one.</p><p>String decrementing is "magical" just like string increment (see <a href="/routine/succ">succ</a>). It fails on underflow</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">b0</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">pred</span>; <span class="highlite-COMMENT"># OUTPUT: «a9» </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a0</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">pred</span>; <span class="highlite-COMMENT"># OUTPUT: Failure </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">img002.png</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-ROUTINE">pred</span>; <span class="highlite-COMMENT"># OUTPUT: «img001.png» </span></pre> </div> </div> <h2 id="routine_ord" class="raku-h2"><a href="#class_Str" title="go to top of document">routine ord<a class="raku-anchor" title="direct link" href="#routine_ord">§</a></a></h2> <!-- defnmark routine_ord 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">ord</span>(Str:D <span class="highlite-KEYWORD">--></span> Int:D) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">ord</span>(Str:D: <span class="highlite-KEYWORD">--></span> Int:D)</pre> </div> </div> <p>Returns the codepoint number of the base characters of the first grapheme in the string.</p><p>Example:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">ord</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">A</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># 65 </span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">«</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">ord</span>; <span class="highlite-COMMENT"># 171</span></pre> </div> </div> <h2 id="method_ords" class="raku-h2"><a href="#class_Str" title="go to top of document">method ords<a class="raku-anchor" title="direct link" href="#method_ords">§</a></a></h2> <!-- defnmark method_ords 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">ords</span>(Str:D: <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Seq</span>)</pre> </div> </div> <p>Returns a list of Unicode codepoint numbers that describe the codepoints making up the string.</p><p>Example:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">aå«</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">ords</span>; <span class="highlite-COMMENT"># (97 229 171)</span></pre> </div> </div> <p>Strings are represented as graphemes. If a character in the string is represented by multiple codepoints, then all of those codepoints will appear in the result of <code>ords</code>. Therefore, the number of elements in the result may not always be equal to <a href="/routine/chars">chars</a>, but will be equal to <a href="/routine/codes">codes</a>; <a href="/routine/codes">codes</a> computes the codepoints in a different way, so the result might be faster.</p><p>The codepoints returned will represent the string in <a href="/type/NFC"><code>NFC</code></a>. See the <a href="/type/NFD"><code>NFD</code></a>, <a href="/type/NFKC"><code>NFKC</code></a>, and <a href="/type/NFKD"><code>NFKD</code></a> methods if other forms are required.</p> <h2 id="method_trans" class="raku-h2"><a href="#class_Str" title="go to top of document">method trans<a class="raku-anchor" title="direct link" href="#method_trans">§</a></a></h2> <!-- defnmark method_trans 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">trans</span>(Str:D: Pair:D \<span class="highlite-ROUTINE">what</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">*</span><span class="highlite-NAME_HASH">%n</span> <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Str</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">trans</span>(Str:D: <span class="highlite-OPERATOR">*</span><span class="highlite-NAME_ARRAY">@changes</span><span class="highlite-OPERATOR">,</span> :complement(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$c</span>)<span class="highlite-OPERATOR">,</span> :squash(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$s</span>)<span class="highlite-OPERATOR">,</span> :delete(<span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$d</span>) <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Str</span>)</pre> </div> </div> <p>Replaces one or many characters with one or many characters. Ranges are supported, both for keys and values. Regexes work as keys. In case a list of keys and values is used, substrings can be replaced as well. When called with <code>:complement</code> anything but the matched value or range is replaced with a single value; with <code>:delete</code> the matched characters without corresponding replacement are removed. Combining <code>:complement</code> and <code>:delete</code> will remove anything but the matched values, <em>unless replacement characters have been specified</em>, in which case, <code>:delete</code> would be ignored. The adverb <code>:squash</code> will reduce repeated matched characters to a single character.</p><p>Example:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$str</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">say $x<b> && $y<a></span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-NAME_SCALAR">$str</span>.=<span class="highlite-ROUTINE">trans</span>( <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING"><</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">«</span><span class="highlite-STRING_DELIMITER">'</span> ); <span class="highlite-NAME_SCALAR">$str</span>.=<span class="highlite-ROUTINE">trans</span>( <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING"><</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">«</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">></span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">»</span><span class="highlite-STRING_DELIMITER">'</span> ); <span class="highlite-NAME_SCALAR">$str</span>.=<span class="highlite-ROUTINE">trans</span>( [ <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING"><</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">></span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">&</span><span class="highlite-STRING_DELIMITER">'</span> ] <span class="highlite-OPERATOR">=></span> [ <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">&lt;</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">&gt;</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">&amp;</span><span class="highlite-STRING_DELIMITER">'</span> ]); <span class="highlite-NAME_SCALAR">$str</span>.=<span class="highlite-ROUTINE">trans</span>( [<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">'</span>..<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">y</span><span class="highlite-STRING_DELIMITER">'</span>] <span class="highlite-OPERATOR">=></span> [<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">A</span><span class="highlite-STRING_DELIMITER">'</span>..<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">z</span><span class="highlite-STRING_DELIMITER">'</span>] ); <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcdefghij</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>(<span class="highlite-REGEX_DELIMITER">/</span><span class="highlite-REGEX_SPECIAL"><[aeiou]> \w</span><span class="highlite-REGEX_DELIMITER">/</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «cdgh» </span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a123b123c</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>([<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">'</span>..<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">z</span><span class="highlite-STRING_DELIMITER">'</span>] <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">x</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :complement); <span class="highlite-COMMENT"># OUTPUT: «axxxbxxxc» </span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">aaa1123bb123c</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">'</span>..<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">z</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">A</span><span class="highlite-STRING_DELIMITER">'</span>..<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Z</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :squash); <span class="highlite-COMMENT"># OUTPUT: «A1123B123C» </span><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">aaa1123bb123c</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">'</span>..<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">z</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">x</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :complement<span class="highlite-OPERATOR">,</span> :squash); <span class="highlite-COMMENT"># OUTPUT: «aaaxbbxc»</span></pre> </div> </div> <p>In general, the strings will have the same length after the substitution:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a123b123c</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">23</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">4</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «a144b144c» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a123b123c</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">123</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">þð</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># OUTPUT: «aþðþbþðþc»</span></pre> </div> </div> <p><code>:squash</code> and <code>:delete</code> will have the same effect in this case making it a strict substitution:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a123b123c</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">123</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">þð</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :squash); <span class="highlite-COMMENT"># OUTPUT: «aþðbþðc» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a123b123c</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">123</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">þð</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> :delete); <span class="highlite-COMMENT"># OUTPUT: «aþðbþðc»</span></pre> </div> </div> <p><code>:delete</code> will also remove non-matched characters from the original string:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abc</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">comb</span> <span class="highlite-OPERATOR">=></span> 1..2<span class="highlite-OPERATOR">,</span> :delete); <span class="highlite-COMMENT"># OUTPUT: «12»</span></pre> </div> </div> <p>Please note that the behavior of the two versions of the multi method is slightly different. The first form will transpose only one character if the origin is also one character:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcd</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>( <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">zz</span><span class="highlite-STRING_DELIMITER">"</span> ); <span class="highlite-COMMENT"># OUTPUT: «zbcd» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcd</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">trans</span>( <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">ba</span><span class="highlite-STRING_DELIMITER">"</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">yz</span><span class="highlite-STRING_DELIMITER">"</span> ); <span class="highlite-COMMENT"># OUTPUT: «zycd» </span></pre> </div> </div> <p>In the second case, behavior is as expected, since the origin is more than one char long. However, if the <a href="/type/Pair"><code>Pair</code></a> in the multi method does not have a <code>Str</code> as an origin or target, it is handled to the second multi method, and behavior changes:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">abcd</span><span class="highlite-STRING_DELIMITER">"</span>.trans: [<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a</span><span class="highlite-STRING_DELIMITER">"</span>] <span class="highlite-OPERATOR">=></span> [<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">zz</span><span class="highlite-STRING_DELIMITER">"</span>]; <span class="highlite-COMMENT"># OUTPUT: «zzbcd»</span></pre> </div> </div> <p>In this case, neither origin nor target in the <a href="/type/Pair"><code>Pair</code></a> are <code>Str</code>; the method with the <a href="/type/Pair"><code>Pair</code></a> signature then calls the second, making this call above equivalent to <code>"abcd".trans: ["a"] => ["zz"],</code> (with the comma behind, making it a <a href="/type/Positional"><code>Positional</code></a>, instead of a <a href="/type/Pair"><code>Pair</code></a>), resulting in the behavior shown as output.</p> <h2 id="method_indent" class="raku-h2"><a href="#class_Str" title="go to top of document">method indent<a class="raku-anchor" title="direct link" href="#method_indent">§</a></a></h2> <!-- defnmark method_indent 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">indent</span>(<span class="highlite-TYPE">Int</span> <span class="highlite-NAME_SCALAR">$steps</span> <span class="highlite-KEYWORD">where</span> { <span class="highlite-NAME_SCALAR">$_</span> <span class="highlite-OPERATOR">==</span> 0 } ) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">indent</span>(<span class="highlite-TYPE">Int</span> <span class="highlite-NAME_SCALAR">$steps</span> <span class="highlite-KEYWORD">where</span> { <span class="highlite-NAME_SCALAR">$_</span> <span class="highlite-OPERATOR">></span> 0 } ) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">indent</span>(<span class="highlite-NAME_SCALAR">$steps</span> <span class="highlite-KEYWORD">where</span> { .<span class="highlite-ROUTINE">isa</span>(<span class="highlite-TYPE">Whatever</span>) <span class="highlite-OPERATOR">||</span> .<span class="highlite-ROUTINE">isa</span>(<span class="highlite-TYPE">Int</span>) <span class="highlite-OPERATOR">&&</span> <span class="highlite-NAME_SCALAR">$_</span> <span class="highlite-OPERATOR"><</span> 0 } )</pre> </div> </div> <p>Indents each line of the string by <code>$steps</code>. If <code>$steps</code> is negative, it outdents instead. If <code>$steps</code> is <a href="/routine/*"><code>*</code></a>, then the string is outdented to the margin:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING"> indented by 2 spaces</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING"> indented even more</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-ROUTINE">indent</span>(<span class="highlite-OPERATOR">*</span>) <span class="highlite-OPERATOR">eq</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">indented by 2 spaces</span><span class="highlite-ESCAPE">\n</span><span class="highlite-STRING"> indented even more</span><span class="highlite-STRING_DELIMITER">"</span></pre> </div> </div> <h2 id="method_trim" class="raku-h2"><a href="#class_Str" title="go to top of document">method trim<a class="raku-anchor" title="direct link" href="#method_trim">§</a></a></h2> <!-- defnmark method_trim 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">trim</span>(Str:D: <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Str</span>)</pre> </div> </div> <p>Remove leading and trailing whitespace. It can be used both as a method on strings and as a function. When used as a method it will return the trimmed string. In order to do in-place trimming, one needs to write <code>.=trim</code></p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$line</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING"> hello world </span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING"><</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-NAME_SCALAR">$line</span>.<span class="highlite-ROUTINE">trim</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">></span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-COMMENT"># OUTPUT: «<hello world>» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING"><</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-ROUTINE">trim</span>(<span class="highlite-NAME_SCALAR">$line</span>) <span class="highlite-OPERATOR">~</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">></span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-COMMENT"># OUTPUT: «<hello world>» </span><span class="highlite-NAME_SCALAR">$line</span>.<span class="highlite-ROUTINE">trim</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING"><</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-NAME_SCALAR">$line</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">></span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-COMMENT"># OUTPUT: «< hello world >» </span><span class="highlite-NAME_SCALAR">$line</span>.=<span class="highlite-ROUTINE">trim</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING"><</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-NAME_SCALAR">$line</span> <span class="highlite-OPERATOR">~</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">></span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-COMMENT"># OUTPUT: «<hello world>»</span></pre> </div> </div> <p>See also <a href="/routine/trim-trailing">trim-trailing</a> and <a href="/routine/trim-leading">trim-leading</a>.</p> <h2 id="method_trim-trailing" class="raku-h2"><a href="#class_Str" title="go to top of document">method trim-trailing<a class="raku-anchor" title="direct link" href="#method_trim-trailing">§</a></a></h2> <!-- defnmark method_trim-trailing 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">trim-trailing</span>(Str:D: <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Str</span>)</pre> </div> </div> <p>Removes the whitespace characters from the end of a string. See also <a href="/routine/trim">trim</a>.</p> <h2 id="method_trim-leading" class="raku-h2"><a href="#class_Str" title="go to top of document">method trim-leading<a class="raku-anchor" title="direct link" href="#method_trim-leading">§</a></a></h2> <!-- defnmark method_trim-leading 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">trim-leading</span>(Str:D: <span class="highlite-KEYWORD">--></span> <span class="highlite-TYPE">Str</span>)</pre> </div> </div> <p>Removes the whitespace characters from the beginning of a string. See also <a href="/routine/trim">trim</a>.</p> <h2 id="method_NFC" class="raku-h2"><a href="#class_Str" title="go to top of document">method NFC<a class="raku-anchor" title="direct link" href="#method_NFC">§</a></a></h2> <!-- defnmark method_NFC 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">NFC</span>(Str:D: <span class="highlite-KEYWORD">--></span> NFC:D)</pre> </div> </div> <p>Returns a codepoint string in <a href="/type/NFC"><code>NFC</code></a> format (Unicode Normalization Form C / Composed).</p> <h2 id="method_NFD" class="raku-h2"><a href="#class_Str" title="go to top of document">method NFD<a class="raku-anchor" title="direct link" href="#method_NFD">§</a></a></h2> <!-- defnmark method_NFD 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">NFD</span>(Str:D: <span class="highlite-KEYWORD">--></span> NFD:D)</pre> </div> </div> <p>Returns a codepoint string in <a href="/type/NFD"><code>NFD</code></a> format (Unicode Normalization Form D / Decomposed).</p> <h2 id="method_NFKC" class="raku-h2"><a href="#class_Str" title="go to top of document">method NFKC<a class="raku-anchor" title="direct link" href="#method_NFKC">§</a></a></h2> <!-- defnmark method_NFKC 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">NFKC</span>(Str:D: <span class="highlite-KEYWORD">--></span> NFKC:D)</pre> </div> </div> <p>Returns a codepoint string in <a href="/type/NFKC"><code>NFKC</code></a> format (Unicode Normalization Form KC / Compatibility Composed).</p> <h2 id="method_NFKD" class="raku-h2"><a href="#class_Str" title="go to top of document">method NFKD<a class="raku-anchor" title="direct link" href="#method_NFKD">§</a></a></h2> <!-- defnmark method_NFKD 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">NFKD</span>(Str:D: <span class="highlite-KEYWORD">--></span> NFKD:D)</pre> </div> </div> <p>Returns a codepoint string in <a href="/type/NFKD"><code>NFKD</code></a> format (Unicode Normalization Form KD / Compatibility Decomposed).</p> <h2 id="method_ACCEPTS" class="raku-h2"><a href="#class_Str" title="go to top of document">method ACCEPTS<a class="raku-anchor" title="direct link" href="#method_ACCEPTS">§</a></a></h2> <!-- defnmark method_ACCEPTS 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">ACCEPTS</span>(Str:D: <span class="highlite-NAME_SCALAR">$other</span>)</pre> </div> </div> <p>Returns <code>True</code> if the string is <a href="/routine/eq">the same as</a> <code>$other</code>.</p> <h2 id="method_Capture" class="raku-h2"><a href="#class_Str" title="go to top of document">method Capture<a class="raku-anchor" title="direct link" href="#method_Capture">§</a></a></h2> <!-- defnmark method_Capture 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Capture</span>()</pre> </div> </div> <p>Throws <code>X::Cannot::Capture</code>.</p> <h2 id="routine_val" class="raku-h2"><a href="#class_Str" title="go to top of document">routine val<a class="raku-anchor" title="direct link" href="#routine_val">§</a></a></h2> <!-- defnmark routine_val 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">val</span>(<span class="highlite-OPERATOR">*</span><span class="highlite-NAME_ARRAY">@maybevals</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">val</span>(Slip:D \maybevals) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">val</span>(List:D \maybevals) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">val</span>(Pair:D \ww-thing) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">val</span>(\one-thing) <span class="highlite-KEYWORD">multi</span> <span class="highlite-ROUTINE">val</span>(Str:D <span class="highlite-NAME_SCALAR">$MAYBEVAL</span><span class="highlite-OPERATOR">,</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$val-or-fail</span>)</pre> </div> </div> <p>Given a <code>Str</code> that may be parsable as a numeric value, it will attempt to construct the appropriate <a href="/language/glossary#Allomorph">allomorph</a>, returning one of <a href="/type/IntStr"><code>IntStr</code></a>, <a href="/type/NumStr"><code>NumStr</code></a>, <a href="/type/RatStr"><code>RatStr</code></a> or <a href="/type/ComplexStr"><code>ComplexStr</code></a> or a plain <code>Str</code> if a numeric value cannot be parsed.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">val</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">42</span><span class="highlite-STRING_DELIMITER">"</span>).^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «IntStr» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">val</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">42e0</span><span class="highlite-STRING_DELIMITER">"</span>).^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «NumStr» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">val</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">42.0</span><span class="highlite-STRING_DELIMITER">"</span>).^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «RatStr» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">val</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">42+0i</span><span class="highlite-STRING_DELIMITER">"</span>).^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «ComplexStr»</span></pre> </div> </div> <p>You can use the plus and minus sign, as well as the Unicode "Minus Sign" as part of the String</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-ROUTINE">val</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">−42</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-COMMENT"># OUTPUT: «−42»</span></pre> </div> </div> <p>While characters belonging to the Unicode categories <code>Nl</code> (number letters) and <code>No</code> (other numbers) can be used as numeric literals in the language, they will not be converted to a number by <code>val</code>, by design, and using <code>val</code> on them will produce a failure. The same will happen with synthetic numerics (such as 7̈ ). See <a href="/routine/unival">unival</a> if you need to convert such characters to <a href="/type/Numeric"><code>Numeric</code></a>.</p> <h2 id="method_Version" class="raku-h2"><a href="#class_Str" title="go to top of document">method Version<a class="raku-anchor" title="direct link" href="#method_Version">§</a></a></h2> <!-- defnmark method_Version 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Version</span>(Str:D: <span class="highlite-KEYWORD">--></span> Version:D)</pre> </div> </div> <p>Available as of the 2020.01 release of the Rakudo compiler.</p><p>Coerces the string to <a href="/type/Version"><code>Version</code></a>.</p><p>This could be used for <a href="/language/signatures#Coercion_type">type coercion in signature</a>, as for example:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">sub</span> <span class="highlite-ROUTINE">f</span>(<span class="highlite-TYPE">Version</span>(<span class="highlite-TYPE">Str</span>) <span class="highlite-NAME_SCALAR">$want-version</span>) { <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$want-version</span>.^<span class="highlite-ROUTINE">name</span> }; <span class="highlite-ROUTINE">f</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">1.2.3</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># OUTPUT: «Version»</span></pre> </div> </div> <h2 id="method_Date" class="raku-h2"><a href="#class_Str" title="go to top of document">method Date<a class="raku-anchor" title="direct link" href="#method_Date">§</a></a></h2> <!-- defnmark method_Date 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Date</span>(Str:D:)</pre> </div> </div> <p>Available as of the 2020.05 release of the Rakudo compiler.</p><p>Coerces a <code>Str</code> to a <a href="/type/Date"><code>Date</code></a> object, provided the string is properly formatted. <code>Date(Str)</code> also works.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">2015-11-24</span><span class="highlite-STRING_DELIMITER">'</span>.<span class="highlite-TYPE">Date</span>.<span class="highlite-ROUTINE">year</span>; <span class="highlite-COMMENT"># OUTPUT: «2015» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-TYPE">Date</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">2015-11-24</span><span class="highlite-STRING_DELIMITER">'</span>).<span class="highlite-ROUTINE">year</span>; <span class="highlite-COMMENT"># OUTPUT: «2015»</span></pre> </div> </div> <h2 id="method_DateTime" class="raku-h2"><a href="#class_Str" title="go to top of document">method DateTime<a class="raku-anchor" title="direct link" href="#method_DateTime">§</a></a></h2> <!-- defnmark method_DateTime 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">DateTime</span>(Str:D:)</pre> </div> </div> <p>Available as of the 2020.05 release of the Rakudo compiler.</p><p>Coerces a <code>Str</code> to a <a href="/type/DateTime"><code>DateTime</code></a> object, provided the string is properly formatted. <code>DateTime(Str)</code> also works.</p><p>Examples:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> (<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">2012-02-29T12:34:56Z</span><span class="highlite-STRING_DELIMITER">'</span>).<span class="highlite-TYPE">DateTime</span>.<span class="highlite-ROUTINE">hour</span>; <span class="highlite-COMMENT"># OUTPUT: «12» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-TYPE">DateTime</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">2012-02-29T12:34:56Z</span><span class="highlite-STRING_DELIMITER">'</span>).<span class="highlite-ROUTINE">hour</span>; <span class="highlite-COMMENT"># OUTPUT: «12»</span></pre> </div> </div> <p>Since Rakudo release 2022.07, it is also possible to just specify a "YYYY-MM-DD" string to indicate midnight on the given date.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">2023-03-04</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-TYPE">DateTime</span>; <span class="highlite-COMMENT"># OUTPUT: «2023-03-04T00:00:00Z»</span></pre> </div> </div> <h1 id="typegraphrelations" class="raku-h1"><a href="#" title="go to top of document">Typegraph<a class="raku-anchor" title="direct link" href="#typegraphrelations">§</a></a></h1> <figure class="typegraph" > <figcaption>Type relations for <code>Str</code></figcaption> <svg width="492pt" height="404pt" viewBox="0.00 0.00 492.19 404.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 400)"> <title>raku-type-graph</title> <polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-400 488.19,-400 488.19,4 -4,4"/> <!-- Str --> <g id="node1" class="node"> <title>Str</title> <g id="a_node1"><a xlink:href="/type/Str" xlink:title="Str"> <ellipse fill="none" stroke="#000000" cx="332.5" cy="-162" rx="27" ry="18"/> <text text-anchor="middle" x="332.5" y="-158.3" font-family="FreeSans" font-size="14.00" fill="#000000">Str</text> </a> </g> </g> <!-- Cool --> <g id="node4" class="node"> <title>Cool</title> <g id="a_node4"><a xlink:href="/type/Cool" xlink:title="Cool"> <ellipse fill="none" stroke="#000000" cx="246.5" cy="-234" rx="30.59" ry="18"/> <text text-anchor="middle" x="246.5" y="-230.3" font-family="FreeSans" font-size="14.00" fill="#000000">Cool</text> </a> </g> </g> <!-- Str->Cool --> <g id="edge1" class="edge"> <title>Str->Cool</title> <path fill="none" stroke="#000000" d="M315.92,-176.5C303.35,-186.73 285.87,-200.96 271.59,-212.58"/> <polygon fill="#000000" stroke="#000000" points="269.16,-210.04 263.62,-219.07 273.58,-215.47 269.16,-210.04"/> </g> <!-- Stringy --> <g id="node5" class="node"> <title>Stringy</title> <g id="a_node5"><a xlink:href="/type/Stringy" xlink:title="Stringy"> <ellipse fill="none" stroke="#6666ff" cx="338.5" cy="-234" rx="43.59" ry="18"/> <text text-anchor="middle" x="338.5" y="-230.3" font-family="FreeSans" font-size="14.00" fill="#6666ff">Stringy</text> </a> </g> </g> <!-- Str->Stringy --> <g id="edge17" class="edge"> <title>Str->Stringy</title> <path fill="none" stroke="#6666ff" d="M333.98,-180.3C334.64,-188.02 335.44,-197.29 336.17,-205.89"/> <polygon fill="#6666ff" stroke="#6666ff" points="332.69,-206.23 337.03,-215.9 339.66,-205.63 332.69,-206.23"/> </g> <!-- Mu --> <g id="node2" class="node"> <title>Mu</title> <g id="a_node2"><a xlink:href="/type/Mu" xlink:title="Mu"> <ellipse fill="none" stroke="#000000" cx="246.5" cy="-378" rx="27" ry="18"/> <text text-anchor="middle" x="246.5" y="-374.3" font-family="FreeSans" font-size="14.00" fill="#000000">Mu</text> </a> </g> </g> <!-- Any --> <g id="node3" class="node"> <title>Any</title> <g id="a_node3"><a xlink:href="/type/Any" xlink:title="Any"> <ellipse fill="none" stroke="#000000" cx="246.5" cy="-306" rx="28.7" ry="18"/> <text text-anchor="middle" x="246.5" y="-302.3" font-family="FreeSans" font-size="14.00" fill="#000000">Any</text> </a> </g> </g> <!-- Any->Mu --> <g id="edge2" class="edge"> <title>Any->Mu</title> <path fill="none" stroke="#000000" d="M246.5,-324.3C246.5,-332.02 246.5,-341.29 246.5,-349.89"/> <polygon fill="#000000" stroke="#000000" points="243,-349.9 246.5,-359.9 250,-349.9 243,-349.9"/> </g> <!-- Cool->Any --> <g id="edge3" class="edge"> <title>Cool->Any</title> <path fill="none" stroke="#000000" d="M246.5,-252.3C246.5,-260.02 246.5,-269.29 246.5,-277.89"/> <polygon fill="#000000" stroke="#000000" points="243,-277.9 246.5,-287.9 250,-277.9 243,-277.9"/> </g> <!-- Allomorph --> <g id="node6" class="node"> <title>Allomorph</title> <g id="a_node6"><a xlink:href="/type/Allomorph" xlink:title="Allomorph"> <ellipse fill="none" stroke="#000000" cx="334.5" cy="-90" rx="57.39" ry="18"/> <text text-anchor="middle" x="334.5" y="-86.3" font-family="FreeSans" font-size="14.00" fill="#000000">Allomorph</text> </a> </g> </g> <!-- Allomorph->Str --> <g id="edge4" class="edge"> <title>Allomorph->Str</title> <path fill="none" stroke="#000000" d="M334,-108.3C333.78,-116.02 333.52,-125.29 333.27,-133.89"/> <polygon fill="#000000" stroke="#000000" points="329.77,-133.8 332.99,-143.9 336.77,-134 329.77,-133.8"/> </g> <!-- Numeric --> <g id="node7" class="node"> <title>Numeric</title> <g id="a_node7"><a xlink:href="/type/Numeric" xlink:title="Numeric"> <ellipse fill="none" stroke="#6666ff" cx="381.5" cy="-306" rx="48.99" ry="18"/> <text text-anchor="middle" x="381.5" y="-302.3" font-family="FreeSans" font-size="14.00" fill="#6666ff">Numeric</text> </a> </g> </g> <!-- Complex --> <g id="node8" class="node"> <title>Complex</title> <g id="a_node8"><a xlink:href="/type/Complex" xlink:title="Complex"> <ellipse fill="none" stroke="#000000" cx="427.5" cy="-162" rx="50.09" ry="18"/> <text text-anchor="middle" x="427.5" y="-158.3" font-family="FreeSans" font-size="14.00" fill="#000000">Complex</text> </a> </g> </g> <!-- Complex->Cool --> <g id="edge5" class="edge"> <title>Complex->Cool</title> <path fill="none" stroke="#000000" d="M393.85,-175.56C351.85,-191.23 285.5,-216 285.5,-216 285.5,-216 283.3,-216.96 279.95,-218.42"/> <polygon fill="#000000" stroke="#000000" points="278.3,-215.32 270.53,-222.52 281.1,-221.74 278.3,-215.32"/> </g> <!-- Complex->Numeric --> <g id="edge18" class="edge"> <title>Complex->Numeric</title> <path fill="none" stroke="#6666ff" d="M421.95,-180.13C414.07,-204.44 399.58,-249.18 390.25,-277.99"/> <polygon fill="#6666ff" stroke="#6666ff" points="386.82,-277.22 387.07,-287.81 393.48,-279.38 386.82,-277.22"/> </g> <!-- ComplexStr --> <g id="node9" class="node"> <title>ComplexStr</title> <g id="a_node9"><a xlink:href="/type/ComplexStr" xlink:title="ComplexStr"> <ellipse fill="none" stroke="#000000" cx="420.5" cy="-18" rx="63.89" ry="18"/> <text text-anchor="middle" x="420.5" y="-14.3" font-family="FreeSans" font-size="14.00" fill="#000000">ComplexStr</text> </a> </g> </g> <!-- ComplexStr->Allomorph --> <g id="edge6" class="edge"> <title>ComplexStr->Allomorph</title> <path fill="none" stroke="#000000" d="M400.55,-35.24C389.15,-44.51 374.69,-56.29 362.2,-66.45"/> <polygon fill="#000000" stroke="#000000" points="359.88,-63.83 354.34,-72.85 364.3,-69.25 359.88,-63.83"/> </g> <!-- ComplexStr->Complex --> <g id="edge7" class="edge"> <title>ComplexStr->Complex</title> <path fill="none" stroke="#000000" d="M421.34,-36.13C422.53,-60.33 424.73,-104.79 426.15,-133.61"/> <polygon fill="#000000" stroke="#000000" points="422.66,-134 426.65,-143.81 429.65,-133.65 422.66,-134"/> </g> <!-- Real --> <g id="node10" class="node"> <title>Real</title> <g id="a_node10"><a xlink:href="/type/Real" xlink:title="Real"> <ellipse fill="none" stroke="#6666ff" cx="152.5" cy="-234" rx="29.8" ry="18"/> <text text-anchor="middle" x="152.5" y="-230.3" font-family="FreeSans" font-size="14.00" fill="#6666ff">Real</text> </a> </g> </g> <!-- Real->Numeric --> <g id="edge19" class="edge"> <title>Real->Numeric</title> <path fill="none" stroke="#6666ff" d="M178.55,-243.2C192.36,-247.55 206.5,-252 206.5,-252 206.5,-252 283.28,-275.25 335.13,-290.96"/> <polygon fill="#6666ff" stroke="#6666ff" points="334.23,-294.34 344.81,-293.89 336.26,-287.64 334.23,-294.34"/> </g> <!-- Num --> <g id="node11" class="node"> <title>Num</title> <g id="a_node11"><a xlink:href="/type/Num" xlink:title="Num"> <ellipse fill="none" stroke="#000000" cx="32.5" cy="-162" rx="32.49" ry="18"/> <text text-anchor="middle" x="32.5" y="-158.3" font-family="FreeSans" font-size="14.00" fill="#000000">Num</text> </a> </g> </g> <!-- Num->Cool --> <g id="edge8" class="edge"> <title>Num->Cool</title> <path fill="none" stroke="#000000" d="M57.9,-173.28C66.74,-176.86 74.5,-180 74.5,-180 74.5,-180 191.5,-216 191.5,-216 191.5,-216 199.94,-218.61 210.21,-221.78"/> <polygon fill="#000000" stroke="#000000" points="209.38,-225.19 219.96,-224.8 211.44,-218.5 209.38,-225.19"/> </g> <!-- Num->Real --> <g id="edge20" class="edge"> <title>Num->Real</title> <path fill="none" stroke="#6666ff" d="M54.23,-175.68C73.49,-186.91 101.79,-203.42 123.08,-215.84"/> <polygon fill="#6666ff" stroke="#6666ff" points="121.33,-218.87 131.73,-220.89 124.86,-212.82 121.33,-218.87"/> </g> <!-- NumStr --> <g id="node12" class="node"> <title>NumStr</title> <g id="a_node12"><a xlink:href="/type/NumStr" xlink:title="NumStr"> <ellipse fill="none" stroke="#000000" cx="79.5" cy="-18" rx="45.49" ry="18"/> <text text-anchor="middle" x="79.5" y="-14.3" font-family="FreeSans" font-size="14.00" fill="#000000">NumStr</text> </a> </g> </g> <!-- NumStr->Allomorph --> <g id="edge9" class="edge"> <title>NumStr->Allomorph</title> <path fill="none" stroke="#000000" d="M115.76,-28.95C159.5,-40.96 233.32,-61.22 282.96,-74.85"/> <polygon fill="#000000" stroke="#000000" points="282.29,-78.3 292.85,-77.57 284.14,-71.55 282.29,-78.3"/> </g> <!-- NumStr->Num --> <g id="edge10" class="edge"> <title>NumStr->Num</title> <path fill="none" stroke="#000000" d="M73.83,-36.13C65.74,-60.57 50.81,-105.67 41.28,-134.45"/> <polygon fill="#000000" stroke="#000000" points="37.86,-133.66 38.04,-144.25 44.51,-135.86 37.86,-133.66"/> </g> <!-- Int --> <g id="node13" class="node"> <title>Int</title> <g id="a_node13"><a xlink:href="/type/Int" xlink:title="Int"> <ellipse fill="none" stroke="#000000" cx="260.5" cy="-162" rx="27" ry="18"/> <text text-anchor="middle" x="260.5" y="-158.3" font-family="FreeSans" font-size="14.00" fill="#000000">Int</text> </a> </g> </g> <!-- Int->Cool --> <g id="edge11" class="edge"> <title>Int->Cool</title> <path fill="none" stroke="#000000" d="M257.11,-179.95C255.57,-187.65 253.7,-196.97 251.97,-205.64"/> <polygon fill="#000000" stroke="#000000" points="248.48,-205.23 249.95,-215.72 255.35,-206.61 248.48,-205.23"/> </g> <!-- Int->Real --> <g id="edge21" class="edge"> <title>Int->Real</title> <path fill="none" stroke="#6666ff" d="M241.68,-175.19C224.89,-186.08 200.04,-202.19 180.83,-214.63"/> <polygon fill="#6666ff" stroke="#6666ff" points="178.68,-211.86 172.19,-220.24 182.48,-217.74 178.68,-211.86"/> </g> <!-- IntStr --> <g id="node14" class="node"> <title>IntStr</title> <g id="a_node14"><a xlink:href="/type/IntStr" xlink:title="IntStr"> <ellipse fill="none" stroke="#000000" cx="299.5" cy="-18" rx="36.29" ry="18"/> <text text-anchor="middle" x="299.5" y="-14.3" font-family="FreeSans" font-size="14.00" fill="#000000">IntStr</text> </a> </g> </g> <!-- IntStr->Allomorph --> <g id="edge12" class="edge"> <title>IntStr->Allomorph</title> <path fill="none" stroke="#000000" d="M307.79,-35.59C311.87,-43.75 316.89,-53.78 321.46,-62.93"/> <polygon fill="#000000" stroke="#000000" points="318.42,-64.66 326.02,-72.04 324.68,-61.53 318.42,-64.66"/> </g> <!-- IntStr->Int --> <g id="edge13" class="edge"> <title>IntStr->Int</title> <path fill="none" stroke="#000000" d="M289.86,-35.48C280.76,-51.04 268.5,-72 268.5,-72 268.5,-72 265.3,-107.52 262.95,-133.68"/> <polygon fill="#000000" stroke="#000000" points="259.45,-133.57 262.04,-143.84 266.42,-134.19 259.45,-133.57"/> </g> <!-- Rational --> <g id="node15" class="node"> <title>Rational</title> <g id="a_node15"><a xlink:href="/type/Rational" xlink:title="Rational"> <ellipse fill="none" stroke="#6666ff" cx="130.5" cy="-162" rx="47.39" ry="18"/> <text text-anchor="middle" x="130.5" y="-158.3" font-family="FreeSans" font-size="14.00" fill="#6666ff">Rational</text> </a> </g> </g> <!-- Rational->Real --> <g id="edge22" class="edge"> <title>Rational->Real</title> <path fill="none" stroke="#6666ff" d="M135.82,-179.95C138.34,-187.94 141.39,-197.67 144.2,-206.6"/> <polygon fill="#6666ff" stroke="#6666ff" points="140.88,-207.72 147.22,-216.21 147.56,-205.62 140.88,-207.72"/> </g> <!-- Rat --> <g id="node16" class="node"> <title>Rat</title> <g id="a_node16"><a xlink:href="/type/Rat" xlink:title="Rat"> <ellipse fill="none" stroke="#000000" cx="194.5" cy="-90" rx="27" ry="18"/> <text text-anchor="middle" x="194.5" y="-86.3" font-family="FreeSans" font-size="14.00" fill="#000000">Rat</text> </a> </g> </g> <!-- Rat->Cool --> <g id="edge14" class="edge"> <title>Rat->Cool</title> <path fill="none" stroke="#000000" d="M200.14,-107.74C208.83,-133.52 224.5,-180 224.5,-180 224.5,-180 230.06,-193.41 235.59,-206.73"/> <polygon fill="#000000" stroke="#000000" points="232.47,-208.34 239.54,-216.23 238.93,-205.65 232.47,-208.34"/> </g> <!-- Rat->Rational --> <g id="edge23" class="edge"> <title>Rat->Rational</title> <path fill="none" stroke="#6666ff" d="M180.92,-105.85C172.62,-114.93 161.8,-126.76 152.32,-137.13"/> <polygon fill="#6666ff" stroke="#6666ff" points="149.56,-134.97 145.39,-144.71 154.72,-139.69 149.56,-134.97"/> </g> <!-- RatStr --> <g id="node17" class="node"> <title>RatStr</title> <g id="a_node17"><a xlink:href="/type/RatStr" xlink:title="RatStr"> <ellipse fill="none" stroke="#000000" cx="199.5" cy="-18" rx="38.99" ry="18"/> <text text-anchor="middle" x="199.5" y="-14.3" font-family="FreeSans" font-size="14.00" fill="#000000">RatStr</text> </a> </g> </g> <!-- RatStr->Allomorph --> <g id="edge15" class="edge"> <title>RatStr->Allomorph</title> <path fill="none" stroke="#000000" d="M224.57,-32C244.81,-42.5 273.61,-57.43 296.65,-69.38"/> <polygon fill="#000000" stroke="#000000" points="295.32,-72.63 305.81,-74.13 298.55,-66.42 295.32,-72.63"/> </g> <!-- RatStr->Rat --> <g id="edge16" class="edge"> <title>RatStr->Rat</title> <path fill="none" stroke="#000000" d="M198.26,-36.3C197.71,-44.02 197.05,-53.29 196.43,-61.89"/> <polygon fill="#000000" stroke="#000000" points="192.94,-61.67 195.72,-71.9 199.92,-62.17 192.94,-61.67"/> </g> </g> </svg> <p class="fallback"> <a rel="alternate" href="/assets/typegraphs/Str.svg"> Expand chart above </a></p> </figure> </div></div></section> </div> </div> </div> <footer class="footer main-footer"> <div class="container px-4"> <nav class="level"> <div class="level-left"> <div class="level-item"> <a href="/about">About</a> </div> <div class="level-item"> <a id="toggle-theme">Toggle theme</a> </div> <div class="level-item" title="8206e3aca 2024-09-13"> <a>Commit</a> </div> </div> <div class="level-right"> <div class="level-item"> <a href="/license">License</a> </div> </div> </nav> </div> </footer> </body> </html>