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"><</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 "hello","world" # "hello"
$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"><</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">&&</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">&&</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 <<a href="mailto:gbarr@pobox.com">gbarr@pobox.com</a>>. 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 + -
显示快捷键?