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
Copy file name to clipboardExpand all lines: language/5to6-perlfunc.html
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1404,7 +1404,7 @@ <h2 id="split"><a class="u" href="#___top" title="go to top of document">split</
1404
1404
<ul><li><p>split</p>
1405
1405
</li>
1406
1406
</ul>
1407
-
<p><code>split</code> now requires a pattern. For the equivalent of Perl's behaviour of splitting on whitespace when no pattern is specified, use <ahref="/routine/words">words</a> (or use <code>split</code> with <code>/\s+/</code> as the pattern and <code>:skip-empty</code> as a named argument).</p>
1407
+
<p><code>split</code> now requires a pattern. For the equivalent of Perl's behavior of splitting on whitespace when no pattern is specified, use <ahref="/routine/words">words</a> (or use <code>split</code> with <code>/\s+/</code> as the pattern and <code>:skip-empty</code> as a named argument).</p>
<trclass="toc-level-2"><tdclass="toc-number">3.1</td><tdclass="toc-text"><ahref="#Exception_handlers_and_enclosing_blocks">Exception handlers and enclosing blocks</a></td></tr>
72
+
<trclass="toc-level-2"><tdclass="toc-number">3.1</td><tdclass="toc-text"><ahref="#Exception_handlers_and_enclosing_blocks">Exception handlers and enclosing blocks</a></td></tr>
<trclass="toc-level-1"><tdclass="toc-number">6</td><tdclass="toc-text"><ahref="#Resuming_of_exceptions">Resuming of exceptions</a></td></tr>
@@ -93,8 +93,8 @@ <h1 id="Typed_exceptions"><a class="u" href="#___top" title="go to top of docume
93
93
<h1id="Catching_exceptions"><aclass="u" href="#___top" title="go to top of document">Catching exceptions</a></h1>
94
94
<p>It's possible to handle exceptional circumstances by supplying a <code>CATCH</code> block:</p>
95
95
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><spanclass="keyword control control-handlers raku"><span>die</span></span><span> </span><spanclass="support type exception raku"><span>X::IO::DoesNotExist</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>new</span></span><span>(</span><spanclass="keyword operator generic raku"><span>:</span></span><spanclass="routine name raku"><span>path</span></span><span>(</span><spanclass="string quoted double raku"><spanclass="punctuation definition string begin raku"><span>"</span></span><span>foo/bar</span><spanclass="punctuation definition string end raku"><span>"</span></span></span><span>), </span><spanclass="keyword operator generic raku"><span>:</span></span><spanclass="routine name raku"><span>trying</span></span><span>(</span><spanclass="string quoted double raku"><spanclass="punctuation definition string begin raku"><span>"</span></span><span>zombie copy</span><spanclass="punctuation definition string end raku"><span>"</span></span></span><span>));</span></span></div><divclass="line"><spanclass="source raku"><span> </span></span></div><divclass="line"><spanclass="source raku"><spanclass="keyword control closure trait raku"><span>CATCH</span></span><span> </span><spanclass="meta block raku"><spanclass="punctuation definition block raku"><span>{</span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><span> </span><spanclass="keyword control flowcontrol raku"><span>when</span></span><span> </span><spanclass="support type exception raku"><span>X::IO</span></span><span> </span><spanclass="meta block raku"><spanclass="punctuation definition block raku"><span>{</span></span><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>$</span></span><spanclass="support class twigil raku"><span>*</span></span><spanclass="variable other identifier raku"><span>ERR</span></span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>say</span></span><spanclass="keyword operator generic raku"><span>:</span></span><span> </span><spanclass="string quoted double raku"><spanclass="punctuation definition string begin raku"><span>"</span></span><span>some kind of IO exception was caught!</span><spanclass="punctuation definition string end raku"><span>"</span></span></span><span> </span><spanclass="punctuation definition block raku"><span>}</span></span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="punctuation definition block raku"><span>}</span></span></span></span></div><divclass="line"><spanclass="source raku"><span> </span></span></div><divclass="line"><spanclass="source raku"><spanclass="comment line number-sign raku"><spanclass="punctuation definition comment raku"><span>#</span></span><span> OUTPUT: «some kind of IO exception was caught!»</span></span></span></div></pre><p>Here, we are saying that if any exception of type <code>X::IO</code> occurs, then the message <code>some kind of IO exception was caught!</code> will be sent to <em>stderr</em>, which is what <code>$*ERR.say</code> does, getting displayed on whatever constitutes the standard error device in that moment, which will probably be the console by default.</p>
96
-
<p>A <code>CATCH</code> block uses smartmatching similar to how <code>given/when</code> smartmatches on options, thus it's possible to catch and handle various categories of exceptions inside a <code>when</code> block.</p>
97
-
<p>To handle all exceptions, use a <code>default</code> statement. This example prints out almost the same information as the normal backtrace printer.</p>
96
+
<p>A <code>CATCH</code> block uses smartmatching similar to how <code>given/when</code> smartmatches on options, thus it's possible to catch and handle various categories of exceptions inside a <code>when</code> block. And it does so because, within the block, <code>$_</code> is set to the exception that has been raised.</p>
97
+
<p>To handle all exceptions, use a <code>default</code> statement. This example prints out almost the same information as the normal backtrace printer; the <em>dot</em> methods apply to <code>$_</code>, which holds the <code>Exception</code> within the <code>CATCH</code> block.</p>
98
98
<preclass="editor editor-colors"><divclass="line"><spanclass="source raku"><spanclass="keyword control closure trait raku"><span>CATCH</span></span><span> </span><spanclass="meta block raku"><spanclass="punctuation definition block raku"><span>{</span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><span> </span><spanclass="keyword control flowcontrol raku"><span>default</span></span><span> </span><spanclass="meta block raku"><spanclass="punctuation definition block raku"><span>{</span></span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="meta block raku"><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>$</span></span><spanclass="support class twigil raku"><span>*</span></span><spanclass="variable other identifier raku"><span>ERR</span></span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>say</span></span><spanclass="keyword operator generic raku"><span>:</span></span><span> </span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>message</span></span><span>;</span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="meta block raku"><span> </span><spanclass="keyword control repeat raku"><span>for</span></span><span> </span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>backtrace</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>reverse</span></span><span> </span><spanclass="meta block raku"><spanclass="punctuation definition block raku"><span>{</span></span></span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="meta block raku"><spanclass="meta block raku"><span> </span><spanclass="keyword control flowcontrol raku"><span>next</span></span><span> </span><spanclass="keyword control conditional raku"><span>if</span></span><span> </span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>file</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>starts-with</span></span><span>(</span><spanclass="string quoted single single raku"><spanclass="punctuation definition string begin raku"><span>'</span></span><span>SETTING::</span><spanclass="punctuation definition string end raku"><span>'</span></span></span><span>);</span></span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="meta block raku"><spanclass="meta block raku"><span> </span><spanclass="keyword control flowcontrol raku"><span>next</span></span><span> </span><spanclass="keyword control conditional raku"><span>unless</span></span><span> </span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>subname</span></span><span>;</span></span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="meta block raku"><spanclass="meta block raku"><span> </span><spanclass="meta variable container raku"><spanclass="variable other identifier sigil raku"><span>$</span></span><spanclass="support class twigil raku"><span>*</span></span><spanclass="variable other identifier raku"><span>ERR</span></span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="support function raku"><span>say</span></span><spanclass="keyword operator generic raku"><span>:</span></span><span> </span><spanclass="string quoted double raku"><spanclass="punctuation definition string begin raku"><span>"</span></span><span> in block </span><spanclass="meta interpolation raku"><spanclass="punctuation section embedded begin raku"><span>{</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>subname</span></span><spanclass="punctuation section embedded end raku"><span>}</span></span></span><span> at </span><spanclass="meta interpolation raku"><spanclass="punctuation section embedded begin raku"><span>{</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>file</span></span><spanclass="punctuation section embedded end raku"><span>}</span></span></span><span> line </span><spanclass="meta interpolation raku"><spanclass="punctuation section embedded begin raku"><span>{</span></span><spanclass="keyword operator generic raku"><span>.</span></span><spanclass="routine name raku"><span>line</span></span><spanclass="punctuation section embedded end raku"><span>}</span></span></span><spanclass="punctuation definition string end raku"><span>"</span></span></span><span>;</span></span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="meta block raku"><spanclass="meta block raku"><span> </span><spanclass="punctuation definition block raku"><span>}</span></span></span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="meta block raku"><span> </span><spanclass="punctuation definition block raku"><span>}</span></span></span></span></span></div><divclass="line"><spanclass="source raku"><spanclass="meta block raku"><spanclass="punctuation definition block raku"><span>}</span></span></span></span></div></pre><p>Note that the match target is a role. To allow user defined exceptions to match in the same manner, they must implement the given role. Just existing in the same namespace will look alike but won't match in a <code>CATCH</code> block.</p>
99
99
<h2id="Exception_handlers_and_enclosing_blocks"><aclass="u" href="#___top" title="go to top of document">Exception handlers and enclosing blocks</a></h2>
100
100
<p>After a CATCH has handled the exception, the block enclosing the <code>CATCH</code> block is exited.</p>
0 commit comments