⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 switch.html

📁 perl教程
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../displayToc.js"></script>
<script language="JavaScript" src="../tocParas.js"></script>
<script language="JavaScript" src="../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../scineplex.css">
<title>Switch - A switch statement for Perl</title>
<link rel="stylesheet" href="../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>

<body>

<script>writelinks('__top__',1);</script>
<h1><a>Switch - A switch statement for Perl</a></h1>
<p><a name="__index__"></a></p>

<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#version">VERSION</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#background">BACKGROUND</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<ul>

		<li><a href="#allowing_fallthrough">Allowing fall-through</a></li>
		<li><a href="#automating_fallthrough">Automating fall-through</a></li>
		<li><a href="#alternative_syntax">Alternative syntax</a></li>
		<li><a href="#higherorder_operations">Higher-order Operations</a></li>
	</ul>

	<li><a href="#dependencies">DEPENDENCIES</a></li>
	<li><a href="#author">AUTHOR</a></li>
	<li><a href="#bugs">BUGS</a></li>
	<li><a href="#limitations">LIMITATIONS</a></li>
	<li><a href="#copyright">COPYRIGHT</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>Switch - A switch statement for Perl</p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>This document describes version 2.10 of Switch,
released Dec 29, 2003.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
        <span class="keyword">use</span> <span class="variable">Switch</span><span class="operator">;</span>
</pre>
<pre>
        <span class="variable">switch</span> <span class="operator">(</span><span class="variable">$val</span><span class="operator">)</span> <span class="operator">{</span>
</pre>
<pre>
                <span class="variable">case</span> <span class="number">1</span>          <span class="operator">{</span> <span class="keyword">print</span> <span class="string">"number 1"</span> <span class="operator">}</span>
                <span class="variable">case</span> <span class="string">"a"</span>        <span class="operator">{</span> <span class="keyword">print</span> <span class="string">"string a"</span> <span class="operator">}</span>
                <span class="variable">case</span> <span class="operator">[</span><span class="number">1</span><span class="operator">..</span><span class="number">10</span><span class="operator">,</span><span class="number">42</span><span class="operator">]</span> <span class="operator">{</span> <span class="keyword">print</span> <span class="string">"number in list"</span> <span class="operator">}</span>
                <span class="variable">case</span> <span class="operator">(</span><span class="variable">@array</span><span class="operator">)</span>   <span class="operator">{</span> <span class="keyword">print</span> <span class="string">"number in list"</span> <span class="operator">}</span>
                <span class="variable">case</span> <span class="operator">/\</span><span class="variable">w</span><span class="operator">+</span><span class="regex">/      { print "pattern" }
                case qr/</span><span class="operator">\</span><span class="variable">w</span><span class="operator">+</span><span class="regex">/    { print "pattern" }
                case (%hash)    { print "entry in hash" }
                case (\%hash)   { print "entry in hash" }
                case (\&amp;sub)    { print "arg to subroutine" }
                else            { print "previous case not true" }
                        }
                </span>
</pre>
<p>
</p>
<hr />
<h1><a name="background">BACKGROUND</a></h1>
<p>[Skip ahead to <a href="#description">DESCRIPTION</a> if you don't care about the whys
and wherefores of this control structure]</p>
<p>In seeking to devise a &quot;Swiss Army&quot; case mechanism suitable for Perl,
it is useful to generalize this notion of distributed conditional
testing as far as possible. Specifically, the concept of &quot;matching&quot;
between the switch value and the various case values need not be
restricted to numeric (or string or referential) equality, as it is in other 
languages. Indeed, as Table 1 illustrates, Perl
offers at least eighteen different ways in which two values could
generate a match.</p>
<pre>
        Table 1: Matching a switch value ($s) with a case value ($c)</pre>
<pre>
        Switch  Case    Type of Match Implied   Matching Code
        Value   Value   
        ======  =====   =====================   =============</pre>
<pre>
        <span class="variable">number</span>  <span class="variable">same</span>    <span class="variable">numeric</span> <span class="keyword">or</span> <span class="variable">referential</span>  <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">$s</span> <span class="operator">==</span> <span class="variable">$c</span><span class="operator">;</span>
        <span class="keyword">or</span> <span class="keyword">ref</span>          <span class="variable">equality</span>
</pre>
<pre>
        <span class="variable">object</span>  <span class="variable">method</span>  <span class="variable">result</span> <span class="variable">of</span> <span class="variable">method</span> <span class="variable">call</span>   <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">$s</span><span class="operator">-&gt;</span><span class="variable">$c</span><span class="operator">();</span>
        <span class="keyword">ref</span>     <span class="variable">name</span>                            <span class="variable">match</span> <span class="keyword">if</span> <span class="keyword">defined</span> <span class="variable">$s</span><span class="operator">-&gt;</span><span class="variable">$c</span><span class="operator">();</span>
                <span class="keyword">or</span> <span class="keyword">ref</span>
</pre>
<pre>
        <span class="variable">other</span>   <span class="variable">other</span>   <span class="variable">string</span> <span class="variable">equality</span>         <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">$s</span> <span class="keyword">eq</span> <span class="variable">$c</span><span class="operator">;</span>
        <span class="variable">non</span><span class="operator">-</span><span class="keyword">ref</span> <span class="variable">non</span><span class="operator">-</span><span class="keyword">ref</span>
        <span class="keyword">scalar</span>  <span class="keyword">scalar</span>
</pre>
<pre>
        <span class="variable">string</span>  <span class="variable">regexp</span>  <span class="variable">pattern</span> <span class="variable">match</span>           <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">$s</span> <span class="operator">=~</span> <span class="regex">/$c/</span><span class="operator">;</span>
</pre>
<pre>
        <span class="variable">array</span>   <span class="keyword">scalar</span>  <span class="variable">array</span> <span class="variable">entry</span> <span class="variable">existence</span>   <span class="variable">match</span> <span class="keyword">if</span> <span class="number">0</span><span class="operator">&lt;=</span><span class="variable">$c</span> <span class="operator">&amp;&amp;</span> <span class="variable">$c</span><span class="operator">&lt;</span><span class="variable">@$s</span><span class="operator">;</span>
        <span class="keyword">ref</span>             <span class="variable">array</span> <span class="variable">entry</span> <span class="variable">definition</span>  <span class="variable">match</span> <span class="keyword">if</span> <span class="keyword">defined</span> <span class="variable">$s</span><span class="operator">-&gt;</span><span class="operator">[</span><span class="variable">$c</span><span class="operator">]</span><span class="operator">;</span>
                        <span class="variable">array</span> <span class="variable">entry</span> <span class="variable">truth</span>       <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">$s</span><span class="operator">-&gt;</span><span class="operator">[</span><span class="variable">$c</span><span class="operator">]</span><span class="operator">;</span>
</pre>
<pre>
        <span class="variable">array</span>   <span class="variable">array</span>   <span class="variable">array</span> <span class="variable">intersection</span>      <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">intersects</span><span class="operator">(</span><span class="variable">@$s</span><span class="operator">,</span> <span class="variable">@$c</span><span class="operator">);</span>
        <span class="keyword">ref</span>     <span class="keyword">ref</span>     <span class="operator">(</span><span class="variable">apply</span> <span class="variable">this</span> <span class="variable">table</span> <span class="variable">to</span>
                         <span class="variable">all</span> <span class="variable">pairs</span> <span class="variable">of</span> <span class="variable">elements</span>
                         <span class="variable">$s</span><span class="operator">-&gt;</span><span class="operator">[</span><span class="variable">$i</span><span class="operator">]</span> <span class="keyword">and</span>
                         <span class="variable">$c</span><span class="operator">-&gt;</span><span class="operator">[</span><span class="variable">$j</span><span class="operator">]</span><span class="operator">)</span>
</pre>
<pre>
        <span class="variable">array</span>   <span class="variable">regexp</span>  <span class="variable">array</span> <span class="keyword">grep</span>              <span class="variable">match</span> <span class="keyword">if</span> <span class="keyword">grep</span> <span class="regex">/$c/</span><span class="operator">,</span> <span class="variable">@$s</span><span class="operator">;</span>
        <span class="keyword">ref</span>
</pre>
<pre>
        <span class="variable">hash</span>    <span class="keyword">scalar</span>  <span class="variable">hash</span> <span class="variable">entry</span> <span class="variable">existence</span>    <span class="variable">match</span> <span class="keyword">if</span> <span class="keyword">exists</span> <span class="variable">$s</span><span class="operator">-&gt;</span><span class="operator">{</span><span class="variable">$c</span><span class="operator">}</span><span class="operator">;</span>
        <span class="keyword">ref</span>             <span class="variable">hash</span> <span class="variable">entry</span> <span class="variable">definition</span>   <span class="variable">match</span> <span class="keyword">if</span> <span class="keyword">defined</span> <span class="variable">$s</span><span class="operator">-&gt;</span><span class="operator">{</span><span class="variable">$c</span><span class="operator">}</span><span class="operator">;</span>
                        <span class="variable">hash</span> <span class="variable">entry</span> <span class="variable">truth</span>        <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">$s</span><span class="operator">-&gt;</span><span class="operator">{</span><span class="variable">$c</span><span class="operator">}</span><span class="operator">;</span>
</pre>
<pre>
        <span class="variable">hash</span>    <span class="variable">regexp</span>  <span class="variable">hash</span> <span class="keyword">grep</span>               <span class="variable">match</span> <span class="keyword">if</span> <span class="keyword">grep</span> <span class="regex">/$c/</span><span class="operator">,</span> <span class="keyword">keys</span> <span class="variable">%$s</span><span class="operator">;</span>
        <span class="keyword">ref</span>
</pre>
<pre>
        <span class="keyword">sub</span><span class="variable">     scalar  return value defn       match if defined $s-&gt;</span><span class="operator">(</span>$c<span class="operator">);</span>
        <span class="keyword">ref</span>             <span class="keyword">return</span> <span class="variable">value</span> <span class="variable">truth</span>      <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">$s</span><span class="operator">-&gt;(</span><span class="variable">$c</span><span class="operator">);</span>
</pre>
<pre>
        <span class="keyword">sub</span><span class="variable">     array   return value defn       match if defined $s-&gt;</span><span class="operator">(</span>@$c<span class="operator">);</span>
        <span class="keyword">ref</span>     <span class="keyword">ref</span>     <span class="keyword">return</span> <span class="variable">value</span> <span class="variable">truth</span>      <span class="variable">match</span> <span class="keyword">if</span> <span class="variable">$s</span><span class="operator">-&gt;(</span><span class="variable">@$c</span><span class="operator">);</span>
</pre>

⌨️ 快捷键说明

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