util.html

来自「perl教程」· HTML 代码 · 共 287 行 · 第 1/2 页

HTML
287
字号
<pre>
    <span class="variable">$foo</span> <span class="operator">=</span> <span class="variable">reduce</span> <span class="operator">{</span> <span class="variable">$a</span> <span class="operator">&lt;</span> <span class="variable">$b</span> <span class="operator">?</span> <span class="variable">$a</span> <span class="operator">:</span> <span class="variable">$b</span> <span class="operator">}</span> <span class="number">1</span><span class="operator">..</span><span class="number">10</span>
</pre>
</dd>
</li>
<dt><strong><a name="item_minstr">minstr LIST</a></strong>

<dd>
<p>Similar to <a href="#item_min"><code>min</code></a>, but treats all the entries in the list as strings
and returns the lowest string as defined by the <code>lt</code> operator.
If the list is empty then <a href="../../lib/Pod/perlfunc.html#item_undef"><code>undef</code></a> is returned.</p>
</dd>
<dd>
<pre>
    $foo = minstr 'A'..'Z'          # 'A'
    $foo = minstr &quot;hello&quot;,&quot;world&quot;   # &quot;hello&quot;
    $foo = minstr @bar, @baz        # whatever</pre>
</dd>
<dd>
<p>This function could be implemented using <a href="#item_reduce"><code>reduce</code></a> like this</p>
</dd>
<dd>
<pre>
    <span class="variable">$foo</span> <span class="operator">=</span> <span class="variable">reduce</span> <span class="operator">{</span> <span class="variable">$a</span> <span class="keyword">lt</span> <span class="variable">$b</span> <span class="operator">?</span> <span class="variable">$a</span> <span class="operator">:</span> <span class="variable">$b</span> <span class="operator">}</span> <span class="string">'A'</span><span class="operator">..</span><span class="string">'Z'</span>
</pre>
</dd>
</li>
<dt><strong><a name="item_reduce">reduce BLOCK LIST</a></strong>

<dd>
<p>Reduces LIST by calling BLOCK multiple times, setting <a href="../../lib/Pod/perlvar.html#item__a"><code>$a</code></a> and <a href="../../lib/Pod/perlvar.html#item__b"><code>$b</code></a>
each time. The first call will be with <a href="../../lib/Pod/perlvar.html#item__a"><code>$a</code></a> and <a href="../../lib/Pod/perlvar.html#item__b"><code>$b</code></a> set to the first
two elements of the list, subsequent calls will be done by
setting <a href="../../lib/Pod/perlvar.html#item__a"><code>$a</code></a> to the result of the previous call and <a href="../../lib/Pod/perlvar.html#item__b"><code>$b</code></a> to the next
element in the list.</p>
</dd>
<dd>
<p>Returns the result of the last call to BLOCK. If LIST is empty then
<a href="../../lib/Pod/perlfunc.html#item_undef"><code>undef</code></a> is returned. If LIST only contains one element then that
element is returned and BLOCK is not executed.</p>
</dd>
<dd>
<pre>
    <span class="variable">$foo</span> <span class="operator">=</span> <span class="variable">reduce</span> <span class="operator">{</span> <span class="variable">$a</span> <span class="operator">&lt;</span> <span class="variable">$b</span> <span class="operator">?</span> <span class="variable">$a</span> <span class="operator">:</span> <span class="variable">$b</span> <span class="operator">}</span> <span class="number">1</span><span class="operator">..</span><span class="number">10</span>       <span class="comment"># min</span>
    <span class="variable">$foo</span> <span class="operator">=</span> <span class="variable">reduce</span> <span class="operator">{</span> <span class="variable">$a</span> <span class="keyword">lt</span> <span class="variable">$b</span> <span class="operator">?</span> <span class="variable">$a</span> <span class="operator">:</span> <span class="variable">$b</span> <span class="operator">}</span> <span class="string">'aa'</span><span class="operator">..</span><span class="string">'zz'</span> <span class="comment"># minstr</span>
    <span class="variable">$foo</span> <span class="operator">=</span> <span class="variable">reduce</span> <span class="operator">{</span> <span class="variable">$a</span> <span class="operator">+</span> <span class="variable">$b</span> <span class="operator">}</span> <span class="number">1</span> <span class="operator">..</span> <span class="number">10</span>               <span class="comment"># sum</span>
    <span class="variable">$foo</span> <span class="operator">=</span> <span class="variable">reduce</span> <span class="operator">{</span> <span class="variable">$a</span> <span class="operator">.</span> <span class="variable">$b</span> <span class="operator">}</span> <span class="variable">@bar</span>                  <span class="comment"># concat</span>
</pre>
</dd>
</li>
<dt><strong><a name="item_shuffle">shuffle LIST</a></strong>

<dd>
<p>Returns the elements of LIST in a random order</p>
</dd>
<dd>
<pre>
    @cards = shuffle 0..51      # 0..51 in a random order</pre>
</dd>
</li>
<dt><strong><a name="item_sum">sum LIST</a></strong>

<dd>
<p>Returns the sum of all the elements in LIST. If LIST is empty then
<a href="../../lib/Pod/perlfunc.html#item_undef"><code>undef</code></a> is returned.</p>
</dd>
<dd>
<pre>
    $foo = sum 1..10                # 55
    $foo = sum 3,9,12               # 24
    $foo = sum @bar, @baz           # whatever</pre>
</dd>
<dd>
<p>This function could be implemented using <a href="#item_reduce"><code>reduce</code></a> like this</p>
</dd>
<dd>
<pre>
    <span class="variable">$foo</span> <span class="operator">=</span> <span class="variable">reduce</span> <span class="operator">{</span> <span class="variable">$a</span> <span class="operator">+</span> <span class="variable">$b</span> <span class="operator">}</span> <span class="number">1</span><span class="operator">..</span><span class="number">10</span>
</pre>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="known_bugs">KNOWN BUGS</a></h1>
<p>With perl versions prior to 5.005 there are some cases where reduce
will return an incorrect result. This will show up as test 7 of
reduce.t failing.</p>
<p>
</p>
<hr />
<h1><a name="suggested_additions">SUGGESTED ADDITIONS</a></h1>
<p>The following are additions that have been requested, but I have been reluctant
to add due to them being very simple to implement in perl</p>
<pre>
  <span class="comment"># One argument is true</span>
</pre>
<pre>
  <span class="keyword">sub</span><span class="variable"> any </span><span class="operator">{</span> <span class="variable">$_</span> <span class="operator">&amp;&amp;</span> <span class="keyword">return</span> <span class="number">1</span> <span class="keyword">for</span> <span class="variable">@_</span><span class="operator">;</span> <span class="number">0</span> <span class="operator">}</span>
</pre>
<pre>
  <span class="comment"># All arguments are true</span>
</pre>
<pre>
  <span class="keyword">sub</span><span class="variable"> all </span><span class="operator">{</span> <span class="variable">$_</span> <span class="operator">||</span> <span class="keyword">return</span> <span class="number">0</span> <span class="keyword">for</span> <span class="variable">@_</span><span class="operator">;</span> <span class="number">1</span> <span class="operator">}</span>
</pre>
<pre>
  <span class="comment"># All arguments are false</span>
</pre>
<pre>
  <span class="keyword">sub</span><span class="variable"> none </span><span class="operator">{</span> <span class="variable">$_</span> <span class="operator">&amp;&amp;</span> <span class="keyword">return</span> <span class="number">0</span> <span class="keyword">for</span> <span class="variable">@_</span><span class="operator">;</span> <span class="number">1</span> <span class="operator">}</span>
</pre>
<pre>
  <span class="comment"># One argument is false</span>
</pre>
<pre>
  <span class="keyword">sub</span><span class="variable"> notall </span><span class="operator">{</span> <span class="variable">$_</span> <span class="operator">||</span> <span class="keyword">return</span> <span class="number">1</span> <span class="keyword">for</span> <span class="variable">@_</span><span class="operator">;</span> <span class="number">0</span> <span class="operator">}</span>
</pre>
<pre>
  <span class="comment"># How many elements are true</span>
</pre>
<pre>
  <span class="keyword">sub</span><span class="variable"> true </span><span class="operator">{</span> <span class="keyword">scalar</span> <span class="keyword">grep</span> <span class="operator">{</span> <span class="variable">$_</span> <span class="operator">}</span> <span class="variable">@_</span> <span class="operator">}</span>
</pre>
<pre>
  <span class="comment"># How many elements are false</span>
</pre>
<pre>
  <span class="keyword">sub</span><span class="variable"> false </span><span class="operator">{</span> <span class="keyword">scalar</span> <span class="keyword">grep</span> <span class="operator">{</span> <span class="operator">!</span><span class="variable">$_</span> <span class="operator">}</span> <span class="variable">@_</span> <span class="operator">}</span>
</pre>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 1997-2005 Graham Barr &lt;<a href="mailto:gbarr@pobox.com">gbarr@pobox.com</a>&gt;. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.</p>

</body>

</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?