Ah yes. The string '0' is considered false in perl despite having a length of 1. So if $str = '0', then $str will be considered false in a boolean context where length($str) will be 1 and evaluate to true.
I wonder what the op wants to output for the string '0'? Also, I wonder what the output should be for the string '0123'?