It basically looks like we&#39;re talking about switch statements. An alternate method of doing the same thing would be as follows, though I&#39;m not sure how expensive it is:<br><br>$a = &quot;&quot;;<br>$a = $b if $a = &quot;&quot;;<br>
$a = $c if $a = &quot;&quot;;<br>$a = $d if $a = &quot;&quot;;<br>...<br>$a = &quot;default&quot; if $a = &quot;&quot;;<br><br><div class="gmail_quote">On Fri, May 29, 2009 at 4:43 PM, John Macdonald <span dir="ltr">&lt;<a href="mailto:john@perlwolf.com">john@perlwolf.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">On Fri, May 29, 2009 at 04:20:48PM -0400, Mike Stok wrote:<br>
&gt; As of perl 5.10 (I think) it is the &quot;defined or&quot; operator which only<br>
&gt; returns the right hand side if the left hand side is undef, from perlop:<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;C&minus;style Logical Defined$B!>(BOr<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;Although it has no direct equivalent in C, Perl&rsquo;s &quot;//&quot; operator is<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;related to its C&minus;style or. &nbsp;In fact, it&rsquo;s exactly the same as<br>
&gt; &quot;||&quot;,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;except that it tests the left hand side&rsquo;s definedness instead of<br>
&gt; its<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;truth. &nbsp;Thus, &quot;$a // $b&quot; is similar to &quot;defined($a) || $b&quot; (except<br>
&gt; that<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;it returns the value of $a rather than the value of<br>
&gt; &quot;defined($a)&quot;) and<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;is exactly equivalent to &quot;defined($a) ? $a : $b&quot;. &nbsp;This is very<br>
&gt; useful<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;for providing default values for variables. &nbsp;If you actually want<br>
&gt; to<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;test if at least one of $a and $b is defined, use &quot;defined($a //<br>
&gt; $b)&quot;.<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;The &quot;||&quot;, &quot;//&quot; and &quot;&amp;&amp;&quot; operators return the last value evaluated<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;(unlike C&rsquo;s &quot;||&quot; and &quot;&amp;&amp;&quot;, which return 0 or 1).<br>
<br>
</div>This is especially useful for setting a value that can come from<br>
multiple optional locations, and using the first one that was<br>
actually provided:<br>
<br>
 &nbsp; &nbsp;$foo = $opt{foo} || $ENV{PROG_FOO} || $rc_opts{foo} || &#39;default&#39;;<br>
<br>
and, as Mike said, this will still take the first one found even<br>
if the explicitly provided value is 0 or &#39;&#39;. &nbsp;e.g.:<br>
<br>
 &nbsp; &nbsp;prog --foo=0<br>
<br>
The || operator would skip this setting (because it&#39;s false) and<br>
go on to getting the setting of foo from the alternate sources.<br>
<div><div></div><div class="h5">_______________________________________________<br>
toronto-pm mailing list<br>
<a href="mailto:toronto-pm@pm.org">toronto-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/toronto-pm" target="_blank">http://mail.pm.org/mailman/listinfo/toronto-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>J. Bobby Lopez<br>Web: <a href="http://jbldata.com/">http://jbldata.com/</a><br>Twitter: <a href="http://www.twitter.com/jbobbylopez">http://www.twitter.com/jbobbylopez</a><br>
<br>