princepawn has asked for the wisdom of the Perl Monks concerning the following question:

The following simple subroutine:
sub log_msg { my $log_msg = shift; print "value $script::debug"; if ($script::debug) { print sprintf "(%s) $log_msg \n", shell_date; } }
still prints log messages when the printed value of $script::debug is 0.

So this yields two questions, and I would like an answer to both:

  • What are all the false values in Perl? I know of the following:
    1. "0"
    2. ""
    3. 0
    4. 0.0
  • How do one brute-force print every character in a string even if it is typically unprintable? That is, my guess is that things are being printed even when $script::debug appears to be zero when in fact there may be some hidden control char or something in the string.