I've been writing extensive documentatin about some of my code at work, and just stumbled across a need to properly define truth for Perl. I remember the concept being a little foreign to myself when i first learned Perl, even with over 10 years of other languages behind me.
At its simplest, there are three false values for scalars:
0
empty string
undef
But then there are situations where a value was defined as "0.0", which is true, but then if you treat it as a number, in certain contexts if becomes "0", which is false. For instance:
my $string = "0.0";
print "true\n" if $string; # true
my $x = 3 + $string;
print "true\n" if $string; # true
$string += 0;
print "true\n" if $string; # false
I guess maybe this gets beyond the scope of truth vs. false and gets into Perl's loose variable typing, and how they interact.
Anyway, any advice for how to properly explain Perl's concepts of truth and false?
Update:
Someone mentioned that i might want to test $x in the second example. Actually, i want to test string. That one is an example of using $string in a numeric context, but it doesn't set the internal falg for $string to say that it was most recently used as a number. (sorry for butchering this explanation, i don't know exactly how the internals work for scalars in perl)
I use the most powerful debugger available: print!
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.