in reply to question about the Truth

I have to warn you, that comparing to true or false is a very unperlish thing to do. 1 is considered as true, yes, but so is 2, 3.14, and "aardvark". In short: don't ever do
if($flag==true) { ...
because you'll get a false response for any case where $flag is a true value, but not the same as the value for your constant true.

In Perl, you should just be using

if($flag) { ...
if you want to test if it's true, and any of
if(!$flag) { ... if(not $flag) { ... unless($flag) { ...
to test for false.

p.s. An additional warning: All of undef, 0, "" and "0" are considered false in Perl. Perhaps that's too forgiving for you, and you explicitely want to distinguish between them. Use of defined, and of

$value eq ""
are typical idioms to deal with that. And no, you're not supposed to make a distinction between 0 and "0".

Thank you for your time.