note Anonymous Monk <em>A scalar value is interpreted as TRUE in the Boolean sense if it is not the null string or the number 0 (or its string equivalent, "0"). The Boolean context is just a special kind of scalar context where no conversion to a string or a number is ever performed. (see perldata)</em> <p> I know what you mean by the <em>null string</em>, but not every one does, specially not the people who need a reference. Perl doesn't have the concept of <em>null</em>, and we avoid using the term <em>null string</em>, because it's not always clear what is meant by it, the <em>empty string</em>, or an <em>undefined value</em>. <p> Having said that, you only list three things that are false in boolean context: the empty string (null string), the number 0, and the string "0". But you left out the most important one: the undefined value. But there are more, here's a (hopefully) complete list: <ul> <li>The undefined value. <li>The number <tt>0</tt>. <li>The empty string. <li>The string <tt>"0"</tt>. <li>An empty array. <li>An empty hash. <li>Objects with appropriate overloaded boolean value. </ul> <p><em> When used as a number, undef is treated as 0; when used as a string, it is treated the empty string, ""; and when used as a reference that isn't being assigned to, it is treated as an error. </em><p> Well, there's also auto-vivification. <p><em> The while statement executes the block as long as the expression is true (does not evaluate to the null string "" or 0 or "0"). (see perlsyn) </em><p> I wonder why you mention <tt>while</tt>, but not <tt>for(;;)</tt> or <tt>until</tt>. Having said that, your statement is close, but not completely true. The block can also be exited with a <tt>last</tt>, <tt>return</tt>, <tt>goto</tt>, <tt>die</tt> or even a <tt>next LABEL_TO_OUTER_BLOCK</tt> statement. Furthermore, if the condition becomes false <em>during</em> execution of the block, the execution isn't stopped - checks are only done before entering the block. Finally, there's <code> do { ... } while (0); </code> which will execute the block at least once, even if the condition is never true. 495975 495975 38