You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<p>Assigning a list of elements to a hash variable first empties the variable, and then iterates the elements of the right-hand side (which must contain an even number of elements). Note that hash keys are always coerced to be strings even if they are unquoted, but keys with spaces in their names must be quoted. For example, using the common <ahref="/type/Pair">Pair</a> syntax:</p>
98
98
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><spanclass="storage modifier declarator raku"><span>my</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>h</span></span></span><span> </span><spanclass="storage modifier assignment raku"><span>=</span></span><span> </span><spanclass="constant numeric raku"><span>1</span></span><span> </span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>a</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>, </span><spanclass="string pair key raku"><span>b </span></span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="constant numeric raku"><span>2</span></span><span>, </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>1 2</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span> </span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="constant numeric raku"><span>3</span></span><span>;</span></span></div><divclass="line"><spanclass="source raku"><spanclass="support function raku"><span>say</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>h</span></span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>keys</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>sort</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>raku</span></span><span>; </span><spanclass="comment line number-sign raku"><spanclass="punctuation definition comment raku"><span>#</span></span><span> OUTPUT: «("1", "1 2", "b").Seq»</span><span> </span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="support function raku"><span>say</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>h</span></span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>values</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>sort</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>raku</span></span><span> </span><spanclass="comment line number-sign raku"><spanclass="punctuation definition comment raku"><span>#</span></span><span> OUTPUT: «(2, 3, "a").Seq»</span></span></span></div></pre><p>The stringification of the keys can lead to surprising results. For example, the Raku module <code>CSV::Parser</code> in one mode returns a CSV data line as a hash of <code>{UInt => 'value'}</code> pairs which can look like this fragment of a 20-field line:</p>
99
99
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><spanclass="storage modifier declarator raku"><span>my</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>csv</span></span></span><span> </span><spanclass="storage modifier assignment raku"><span>=</span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>2</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span> </span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>a</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>, </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>10</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span> </span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>b</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>;</span></span></div><divclass="line"><spanclass="source raku"><spanclass="support function raku"><span>say</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>csv</span></span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>keys</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>sort</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>raku</span></span><span>; </span><spanclass="comment line number-sign raku"><spanclass="punctuation definition comment raku"><span>#</span></span><span> OUTPUT: «("10", "2").Seq»</span></span></span></div></pre><p>The sort result is not what one would normally want. We can use the power of Raku to coerce the string values into integers for the sort. There are several ways that can be done but this method may present the least "line noise" to novices or non-Raku viewers:</p>
100
-
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><span> </span><spanclass="support function raku"><span>say</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>csv</span></span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>keys</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>map</span></span><span>(</span><spanclass="keyword operator generic raku"><span>+</span><span>*</span></span><span>)</span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>sort</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>raku</span></span><span>; </span><spanclass="comment line number-sign raku"><spanclass="punctuation definition comment raku"><span>#</span></span><span> OUTPUT: «(2, 10).Seq»</span><span> </span></span></span></div></pre><p>In a hash constructor list the <code>Pair</code> syntax doesn't have to be used, or it may be intermixed with ordinary list values as long as the list has an even number of elements in total as well as between <code>Pair</code>s. If an element is a <code>Pair</code> type (e.g., 'a => 1'), its key is taken as a new hash key, and its value as the new hash value for that key. Otherwise the value is coerced to <ahref="/type/Str">Str</a> and used as a hash key, while the next element of the list is taken as the corresponding value.</p>
100
+
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><spanclass="support function raku"><span>say</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>csv</span></span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>keys</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>map</span></span><span>(</span><spanclass="keyword operator generic raku"><span>+</span><span>*</span></span><span>)</span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>sort</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>raku</span></span><span>; </span><spanclass="comment line number-sign raku"><spanclass="punctuation definition comment raku"><span>#</span></span><span> OUTPUT: «(2, 10).Seq»</span><span> </span></span></span></div></pre><p>In a hash constructor list the <code>Pair</code> syntax doesn't have to be used, or it may be intermixed with ordinary list values as long as the list has an even number of elements in total as well as between <code>Pair</code>s. If an element is a <code>Pair</code> type (e.g., 'a => 1'), its key is taken as a new hash key, and its value as the new hash value for that key. Otherwise the value is coerced to <ahref="/type/Str">Str</a> and used as a hash key, while the next element of the list is taken as the corresponding value.</p>
101
101
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><spanclass="storage modifier declarator raku"><span>my</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>h</span></span></span><span> </span><spanclass="storage modifier assignment raku"><span>=</span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>a</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>, </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>b</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>, </span><spanclass="string pair key raku"><span>c </span></span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>d</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>, </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>e</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>, </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>f</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>;</span></span></div></pre><p>Same as</p>
102
102
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><spanclass="storage modifier declarator raku"><span>my</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>h</span></span></span><span> </span><spanclass="storage modifier assignment raku"><span>=</span></span><span> </span><spanclass="string pair key raku"><span>a </span></span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>b</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>, </span><spanclass="string pair key raku"><span>c </span></span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>d</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>, </span><spanclass="string pair key raku"><span>e </span></span><spanclass="keyword operator multi-symbol raku"><span>=></span></span><span> </span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>f</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>;</span></span></div></pre><p>or</p>
103
103
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><spanclass="storage modifier declarator raku"><span>my</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>%</span></span><spanclass="variable other identifier raku"><span>h</span></span></span><span> </span><spanclass="storage modifier assignment raku"><span>=</span></span><span> </span><spanclass="span keyword operator array words raku"><span><</span></span><spanclass="string array words raku"><span>a b c d e f</span></span><spanclass="span keyword operator array words raku"><span>></span></span><span>;</span></span></div></pre><p>or even</p>
0 commit comments