This means that the strings "0.0", "00", "-0", and "0 but true" are all true, even though their value would be converted to 0 in a numeric context; values like these are sometimes used when a successful operation needs to return 0. Evaluating an empty array in scalar context yields codice_19, which is false. Therefore, the following example prints "a is empty":  Perl also provides variants of the loop and conditional constructs that work on a simple statement (an expression evaluated for its side-effects) instead of a block:  The codice_10 and codice_11 modifiers test the controlling expression before executing the statement, just like their loop counterparts. However, they are not considered actual loops, so the loop control keywords codice_13, codice_15 and codice_17 cannot be used with them. They have special semantics when combined with the codice_26 keyword:  In these constructs, the condition is tested after the block is executed, so the block always executes at least once. These modifiers cannot be nested, so the following is illegal  and should be written as one of:  There are two forms of goto in Perl: and The first form is generally deprecated, and is only used in rare situations. For example, when attempting to preserve error status in codice_27, some modules will use goto like this:  open(A, "", $fileb) or goto fail; print B  or goto fail; close A or goto fail; close B or goto fail; return 1; fail: $reason = "In copy: $?"; return 0;  The second form is called a tail call, and is used to enhance the performance of certain kinds of constructs where Perl's default stack management would perform non-optimally. For example:  sub factorial {  This form is also used to create aliases for subroutines with minimal overhead. This can help reduce "Out of Memory" errors (or high memory usage in general) found often in repeating the same subroutine.