<?xml version="1.0" encoding="windows-1252"?>
<node id="475466" title="Why no warnings for 1 in void context?" created="2005-07-16 12:03:36" updated="2005-08-12 12:34:30">
<type id="115">
perlquestion</type>
<author id="439528">
tlm</author>
<data>
<field name="doctext">
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; As [Not_a_Number] points out below, the behavior described in this post applies not only to 1 (as I originally stated), but to 0 as well.  And, after reading [merlyn]'s post, well, it looks like there's a &lt;i&gt;huge&lt;/i&gt; number of constants&amp;mdash;all those strings beginning with "di", "ds", or "ig"&amp;mdash;that perl won't warn about when they are evaluated in a void context.  See the [id://475508|code] responsible for this behavior, kindly posted by [Anonymous Monk|AM].&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;OK, here's another idle Perl arcana question.  A scalar constant in a void context will result in a warning, &lt;em&gt;unless&lt;/em&gt; this constant evaluates to a &lt;em&gt;numeric&lt;/em&gt; value of 1; e.g.:
&lt;c&gt;
% perl -wce 5
Useless use of a constant in void context at -e line 1.
-e syntax OK
% perl -wce 1
-e syntax OK
% perl -wce '5**0'
-e syntax OK
% perl -wce 1.00
-e syntax OK
% perl -wce 'q(1)'
Useless use of a constant in void context at -e line 1.
-e syntax OK
&lt;/c&gt;
Does anyone know the rationale for this special dispensation for (numeric) 1?  The only one I can think of (and it's a pretty tortured one) is that it silences the warning that would have otherwise been triggered by the usual &lt;tt&gt;require&lt;/tt&gt;-appeasing &lt;tt&gt;"1;"&lt;/tt&gt; when one checks a module's syntax using &lt;tt&gt;perl -wc&lt;/tt&gt;.&lt;/p&gt;

&lt;div class="pmsig"&gt;&lt;div class="pmsig-439528"&gt;
&lt;p&gt;&lt;small&gt;the lowliest monk&lt;/small&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</field>
</data>
</node>
