First of all, I come from C, Java, Python background. Recently, I started learning Perl for my new job and I got curious about \'0\' (0-string) being false.
Perl has a number of values that are considered "false": undef, zero, the string "0", the empty string, a special boolean value that morphs into the empty string or the empty list depending on context, and objects that are overloaded for boolean context.
Most of these (undef, zero, empty string, the special value, objects) are actually pretty useful. The string "0" being false stems from the way perl implements scalars and falseness: A scalar contains both a string portion and a numeric portion. To determine, if a value is false, the string portion is consulted first. Why is this necessary?
my $false_ish = 0; # the scalar contains only a number
'' . $false_ish; # force stringy context. the scalar now contains stringy portion.
if ($false_ish) { ... } # string portion is consulted first...
Without this, the number zero would lose its falseness once you use it where a string is needed. On the other hand, this allows "0 but true", a true string wich is the number zero, and "0E0", which is scientific notation for zero, but also evaluates to true.