Paladin is correct. Here's the issue:

"and" (the logical short-circuit operator) only evaluates the right hand side, if the left hand side is "true". That's because, if the left hand side is false, the entire statement can't possibly be true, so there's no point in evaluating the right hand side. That's part of what makes it a "logical" operator. It follows a path of logic. Test left hand side. If left hand side evaluates to true, test right hand side. If it evaluates to true also, the entire chain is true.

So on the first iteration, $counter is zero, which happens to be one value that Perl considers to be "false".

But you're incrementing $counter, with ++... why is it false? Because trailing ++ executes after the expression has been evaluated. Perl also allows for leading (versus trailing) ++ (autoincrement) operators. You could write the expression like this, and you'll find it works like a charm:

++$counter and print "found $users{$elem} if ( $users{$elem}{sales} - +$users{$elem}{payments} > 0 );


Dave


In reply to Re: idiom question by davido
in thread idiom question by geektron

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.