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

📄 deparse.html

📁 perl教程
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<dd>
<p>Cuddle <code>elsif</code>, <code>else</code>, and <a href="../../lib/Pod/perlfunc.html#item_continue"><code>continue</code></a> blocks. For example, print</p>
</dd>
<dd>
<pre>
    <span class="keyword">if</span> <span class="operator">(...)</span> <span class="operator">{</span>
         <span class="operator">...</span>
    <span class="operator">}</span> <span class="keyword">else</span> <span class="operator">{</span>
         <span class="operator">...</span>
    <span class="operator">}</span>
</pre>
</dd>
<dd>
<p>instead of</p>
</dd>
<dd>
<pre>
    <span class="keyword">if</span> <span class="operator">(...)</span> <span class="operator">{</span>
         <span class="operator">...</span>
    <span class="operator">}</span>
    <span class="keyword">else</span> <span class="operator">{</span>
         <span class="operator">...</span>
    <span class="operator">}</span>
</pre>
</dd>
<dd>
<p>The default is not to cuddle.</p>
</dd>
</li>
<dt><strong><a name="item_inumber"><strong>i</strong><em>NUMBER</em></a></strong>

<dd>
<p>Indent lines by multiples of <em>NUMBER</em> columns. The default is 4 columns.</p>
</dd>
</li>
<dt><strong><a name="item_t"><strong>T</strong></a></strong>

<dd>
<p>Use tabs for each 8 columns of indent. The default is to use only spaces.
For instance, if the style options are <strong>-si4T</strong>, a line that's indented
3 times will be preceded by one tab and four spaces; if the options were
<strong>-si8T</strong>, the same line would be preceded by three tabs.</p>
</dd>
</li>
<dt><strong><a name="item_vstring_2e"><strong>v</strong><em>STRING</em><strong>.</strong></a></strong>

<dd>
<p>Print <em>STRING</em> for the value of a constant that can't be determined
because it was optimized away (mnemonic: this happens when a constant
is used in <strong>v</strong>oid context). The end of the string is marked by a period.
The string should be a valid perl expression, generally a constant.
Note that unless it's a number, it probably needs to be quoted, and on
a command line quotes need to be protected from the shell. Some
conventional values include 0, 1, 42, '', 'foo', and
'Useless use of constant omitted' (which may need to be
<strong>-sv&quot;'Useless use of constant omitted'.&quot;</strong>
or something similar depending on your shell). The default is '???'.
If you're using B::Deparse on a module or other file that's require'd,
you shouldn't use a value that evaluates to false, since the customary
true constant at the end of a module will be in void context when the
file is compiled as a main program.</p>
</dd>
</li>
</dl>
<dt><strong><a name="item__2dxlevel"><strong>-x</strong><em>LEVEL</em></a></strong>

<dd>
<p>Expand conventional syntax constructions into equivalent ones that expose
their internal operation. <em>LEVEL</em> should be a digit, with higher values
meaning more expansion. As with <strong>-q</strong>, this actually involves turning off
special cases in B::Deparse's normal operations.</p>
</dd>
<dd>
<p>If <em>LEVEL</em> is at least 3, <code>for</code> loops will be translated into equivalent
while loops with continue blocks; for instance</p>
</dd>
<dd>
<pre>
    <span class="keyword">for</span> <span class="operator">(</span><span class="variable">$i</span> <span class="operator">=</span> <span class="number">0</span><span class="operator">;</span> <span class="variable">$i</span> <span class="operator">&lt;</span> <span class="number">10</span><span class="operator">;</span> <span class="operator">++</span><span class="variable">$i</span><span class="operator">)</span> <span class="operator">{</span>
        <span class="keyword">print</span> <span class="variable">$i</span><span class="operator">;</span>
    <span class="operator">}</span>
</pre>
</dd>
<dd>
<p>turns into</p>
</dd>
<dd>
<pre>
    <span class="variable">$i</span> <span class="operator">=</span> <span class="number">0</span><span class="operator">;</span>
    <span class="keyword">while</span> <span class="operator">(</span><span class="variable">$i</span> <span class="operator">&lt;</span> <span class="number">10</span><span class="operator">)</span> <span class="operator">{</span>
        <span class="keyword">print</span> <span class="variable">$i</span><span class="operator">;</span>
    <span class="operator">}</span> <span class="keyword">continue</span> <span class="operator">{</span>
        <span class="operator">++</span><span class="variable">$i</span>
    <span class="operator">}</span>
</pre>
</dd>
<dd>
<p>Note that in a few cases this translation can't be perfectly carried back
into the source code -- if the loop's initializer declares a my variable,
for instance, it won't have the correct scope outside of the loop.</p>
</dd>
<dd>
<p>If <em>LEVEL</em> is at least 5, <a href="../../lib/Pod/perlfunc.html#item_use"><code>use</code></a> declarations will be translated into
<code>BEGIN</code> blocks containing calls to <a href="../../lib/Pod/perlfunc.html#item_require"><code>require</code></a> and <a href="../../lib/Pod/perlfunc.html#item_import"><code>import</code></a>; for
instance,</p>
</dd>
<dd>
<pre>
    <span class="keyword">use</span> <span class="variable">strict</span> <span class="string">'refs'</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>turns into</p>
</dd>
<dd>
<pre>
    <span class="keyword">sub</span><span class="variable"> BEGIN </span><span class="operator">{</span>
        <span class="keyword">require</span> <span class="variable">strict</span><span class="operator">;</span>
        <span class="keyword">do</span> <span class="operator">{</span>
            <span class="string">'strict'</span><span class="operator">-&gt;</span><span class="variable">import</span><span class="operator">(</span><span class="string">'refs'</span><span class="operator">)</span>
        <span class="operator">};</span>
    <span class="operator">}</span>
</pre>
</dd>
<dd>
<p>If <em>LEVEL</em> is at least 7, <code>if</code> statements will be translated into
equivalent expressions using <code>&amp;&amp;</code>, <code>?:</code> and <a href="../../lib/Pod/perlfunc.html#item_do"><code>do {}</code></a>; for instance</p>
</dd>
<dd>
<pre>
    <span class="keyword">print</span> <span class="string">'hi'</span> <span class="keyword">if</span> <span class="variable">$nice</span><span class="operator">;</span>
    <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$nice</span><span class="operator">)</span> <span class="operator">{</span>
        <span class="keyword">print</span> <span class="string">'hi'</span><span class="operator">;</span>
    <span class="operator">}</span>
    <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$nice</span><span class="operator">)</span> <span class="operator">{</span>
        <span class="keyword">print</span> <span class="string">'hi'</span><span class="operator">;</span>
    <span class="operator">}</span> <span class="keyword">else</span> <span class="operator">{</span>
        <span class="keyword">print</span> <span class="string">'bye'</span><span class="operator">;</span>
    <span class="operator">}</span>
</pre>
</dd>
<dd>
<p>turns into</p>
</dd>
<dd>
<pre>
    <span class="variable">$nice</span> <span class="keyword">and</span> <span class="keyword">print</span> <span class="string">'hi'</span><span class="operator">;</span>
    <span class="variable">$nice</span> <span class="keyword">and</span> <span class="keyword">do</span> <span class="operator">{</span> <span class="keyword">print</span> <span class="string">'hi'</span> <span class="operator">};</span>
    <span class="variable">$nice</span> <span class="operator">?</span> <span class="keyword">do</span> <span class="operator">{</span> <span class="keyword">print</span> <span class="string">'hi'</span> <span class="operator">}</span> <span class="operator">:</span> <span class="keyword">do</span> <span class="operator">{</span> <span class="keyword">print</span> <span class="string">'bye'</span> <span class="operator">};</span>
</pre>
</dd>
<dd>
<p>Long sequences of elsifs will turn into nested ternary operators, which
B::Deparse doesn't know how to indent nicely.</p>
</dd>
</li>
</dl>
<p>
</p>
<hr />
<h1><a name="using_b__deparse_as_a_module">USING B::Deparse AS A MODULE</a></h1>
<p>
</p>
<h2><a name="synopsis">Synopsis</a></h2>
<pre>
    <span class="keyword">use</span> <span class="variable">B::Deparse</span><span class="operator">;</span>
    <span class="variable">$deparse</span> <span class="operator">=</span> <span class="variable">B::Deparse</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">(</span><span class="string">"-p"</span><span class="operator">,</span> <span class="string">"-sC"</span><span class="operator">);</span>
    <span class="variable">$body</span> <span class="operator">=</span> <span class="variable">$deparse</span><span class="operator">-&gt;</span><span class="variable">coderef2text</span><span class="operator">(\&amp;</span><span class="variable">func</span><span class="operator">);</span>
    <span class="keyword">eval</span> <span class="string">"sub func $body"</span><span class="operator">;</span> <span class="comment"># the inverse operation</span>
</pre>
<p>
</p>
<h2><a name="description">Description</a></h2>
<p>B::Deparse can also be used on a sub-by-sub basis from other perl
programs.</p>
<p>
</p>
<h2><a name="new">new</a></h2>
<pre>
    $deparse = B::Deparse-&gt;new(OPTIONS)</pre>
<p>Create an object to store the state of a deparsing operation and any
options. The options are the same as those that can be given on the
command line (see <a href="#options">OPTIONS</a>); options that are separated by commas
after <strong>-MO=Deparse</strong> should be given as separate strings. Some
options, like <strong>-u</strong>, don't make sense for a single subroutine, so
don't pass them.</p>
<p>
</p>
<h2><a name="ambient_pragmas">ambient_pragmas</a></h2>
<pre>
    <span class="variable">$deparse</span><span class="operator">-&gt;</span><span class="variable">ambient_pragmas</span><span class="operator">(</span><span class="string">strict</span> <span class="operator">=&gt;</span> <span class="string">'all'</span><span class="operator">,</span> <span class="string">'$['</span> <span class="operator">=&gt;</span> <span class="variable">$[</span><span class="operator">);</span>
</pre>
<p>The compilation of a subroutine can be affected by a few compiler
directives, <strong>pragmas</strong>. These are:</p>
<ul>
<li>
<p>use strict;</p>
</li>
<li>
<p>use warnings;</p>
</li>
<li>
<p>Assigning to the special variable $[</p>
</li>
<li>
<p>use integer;</p>
</li>
<li>
<p>use bytes;</p>
</li>

⌨️ 快捷键说明

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