constant.html

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

HTML
270
字号
<?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>constant - Perl pragma to declare constants</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>constant - Perl pragma to declare constants</a></h1>
<p><a name="__index__"></a></p>

<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<li><a href="#notes">NOTES</a></li>
	<ul>

		<li><a href="#list_constants">List constants</a></li>
		<li><a href="#defining_multiple_constants_at_once">Defining multiple constants at once</a></li>
		<li><a href="#magic_constants">Magic constants</a></li>
	</ul>

	<li><a href="#technical_notes">TECHNICAL NOTES</a></li>
	<li><a href="#bugs">BUGS</a></li>
	<li><a href="#author">AUTHOR</a></li>
	<li><a href="#copyright">COPYRIGHT</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>constant - Perl pragma to declare constants</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
    <span class="keyword">use</span> <span class="variable">constant</span> <span class="string">PI</span>    <span class="operator">=&gt;</span> <span class="number">4</span> <span class="operator">*</span> <span class="keyword">atan2</span><span class="operator">(</span><span class="number">1</span><span class="operator">,</span> <span class="number">1</span><span class="operator">);</span>
    <span class="keyword">use</span> <span class="variable">constant</span> <span class="string">DEBUG</span> <span class="operator">=&gt;</span> <span class="number">0</span><span class="operator">;</span>
</pre>
<pre>
    <span class="keyword">print</span> <span class="string">"Pi equals "</span><span class="operator">,</span> <span class="variable">PI</span><span class="operator">,</span> <span class="string">"...\n"</span> <span class="keyword">if</span> <span class="variable">DEBUG</span><span class="operator">;</span>
</pre>
<pre>
    <span class="keyword">use</span> <span class="variable">constant</span> <span class="operator">{</span>
        <span class="string">SEC</span>   <span class="operator">=&gt;</span> <span class="number">0</span><span class="operator">,</span>
        <span class="string">MIN</span>   <span class="operator">=&gt;</span> <span class="number">1</span><span class="operator">,</span>
        <span class="string">HOUR</span>  <span class="operator">=&gt;</span> <span class="number">2</span><span class="operator">,</span>
        <span class="string">MDAY</span>  <span class="operator">=&gt;</span> <span class="number">3</span><span class="operator">,</span>
        <span class="string">MON</span>   <span class="operator">=&gt;</span> <span class="number">4</span><span class="operator">,</span>
        <span class="string">YEAR</span>  <span class="operator">=&gt;</span> <span class="number">5</span><span class="operator">,</span>
        <span class="string">WDAY</span>  <span class="operator">=&gt;</span> <span class="number">6</span><span class="operator">,</span>
        <span class="string">YDAY</span>  <span class="operator">=&gt;</span> <span class="number">7</span><span class="operator">,</span>
        <span class="string">ISDST</span> <span class="operator">=&gt;</span> <span class="number">8</span><span class="operator">,</span>
    <span class="operator">};</span>
</pre>
<pre>
    <span class="keyword">use</span> <span class="variable">constant</span> <span class="string">WEEKDAYS</span> <span class="operator">=&gt;</span> <span class="string">qw(
        Sunday Monday Tuesday Wednesday Thursday Friday Saturday
    )</span><span class="operator">;</span>
</pre>
<pre>
    <span class="keyword">print</span> <span class="string">"Today is "</span><span class="operator">,</span> <span class="operator">(</span><span class="variable">WEEKDAYS</span><span class="operator">)</span><span class="operator">[</span> <span class="operator">(</span><span class="keyword">localtime</span><span class="operator">)</span><span class="operator">[</span><span class="variable">WDAY</span><span class="operator">]</span> <span class="operator">]</span><span class="operator">,</span> <span class="string">".\n"</span><span class="operator">;</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>This will declare a symbol to be a constant with the given value.</p>
<p>When you declare a constant such as <code>PI</code> using the method shown
above, each machine your script runs upon can have as many digits
of accuracy as it can use. Also, your program will be easier to
read, more likely to be maintained (and maintained correctly), and
far less likely to send a space probe to the wrong planet because
nobody noticed the one equation in which you wrote <code>3.14195</code>.</p>
<p>When a constant is used in an expression, perl replaces it with its
value at compile time, and may then optimize the expression further.
In particular, any code in an <code>if (CONSTANT)</code> block will be optimized
away if the constant is false.</p>
<p>
</p>
<hr />
<h1><a name="notes">NOTES</a></h1>
<p>As with all <a href="../lib/Pod/perlfunc.html#item_use"><code>use</code></a> directives, defining a constant happens at
compile time. Thus, it's probably not correct to put a constant
declaration inside of a conditional statement (like <code>if ($foo)
{ use constant ... }</code>).</p>
<p>Constants defined using this module cannot be interpolated into
strings like variables.  However, concatenation works just fine:</p>
<pre>
    <span class="keyword">print</span> <span class="string">"Pi equals PI...\n"</span><span class="operator">;</span>        <span class="comment"># WRONG: does not expand "PI"</span>
    <span class="keyword">print</span> <span class="string">"Pi equals "</span><span class="operator">.</span><span class="variable">PI</span><span class="operator">.</span><span class="string">"...\n"</span><span class="operator">;</span>    <span class="comment"># right</span>
</pre>
<p>Even though a reference may be declared as a constant, the reference may
point to data which may be changed, as this code shows.</p>
<pre>
    <span class="keyword">use</span> <span class="variable">constant</span> <span class="string">ARRAY</span> <span class="operator">=&gt;</span> <span class="operator">[</span> <span class="number">1</span><span class="operator">,</span><span class="number">2</span><span class="operator">,</span><span class="number">3</span><span class="operator">,</span><span class="number">4</span> <span class="operator">]</span><span class="operator">;</span>
    <span class="keyword">print</span> <span class="variable">ARRAY</span><span class="operator">-&gt;</span><span class="operator">[</span><span class="number">1</span><span class="operator">]</span><span class="operator">;</span>
    <span class="variable">ARRAY</span><span class="operator">-&gt;</span><span class="operator">[</span><span class="number">1</span><span class="operator">]</span> <span class="operator">=</span> <span class="string">" be changed"</span><span class="operator">;</span>
    <span class="keyword">print</span> <span class="variable">ARRAY</span><span class="operator">-&gt;</span><span class="operator">[</span><span class="number">1</span><span class="operator">]</span><span class="operator">;</span>
</pre>
<p>Dereferencing constant references incorrectly (such as using an array
subscript on a constant hash reference, or vice versa) will be trapped at
compile time.</p>
<p>Constants belong to the package they are defined in.  To refer to a
constant defined in another package, specify the full package name, as
in <code>Some::Package::CONSTANT</code>.  Constants may be exported by modules,
and may also be called as either class or instance methods, that is,
as <code>Some::Package-&gt;CONSTANT</code> or as <code>$obj-&gt;CONSTANT</code> where
<code>$obj</code> is an instance of <code>Some::Package</code>.  Subclasses may define
their own constants to override those in their base class.</p>
<p>The use of all caps for constant names is merely a convention,
although it is recommended in order to make constants stand out
and to help avoid collisions with other barewords, keywords, and
subroutine names. Constant names must begin with a letter or
underscore. Names beginning with a double underscore are reserved. Some
poor choices for names will generate warnings, if warnings are enabled at
compile time.</p>
<p>

⌨️ 快捷键说明

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