develooper Front page | perl.beginners | Postings from August 2009

Precedence, and the ||= op again...

Thread Next
Steve Bertrand
August 17, 2009 17:22
Precedence, and the ||= op again...
Message ID:
Hi all,

Before chasing down and fixing an undef var earlier on in a trace path,
I had the following code. I've finally gathered that fixing bugs and
validating data upstream is far better than writing code to fix it later
(of course, I had to write code to find out what was happening).

The last two lines do not do what I originally was hoping they would.
The code has been fixed.

I _thought_ that if I use the 'or assign' op, it would either append the
$payment amount to the existing hash element, or if it didn't exist, it
would create one from the current $payment.

I recalled that a hash element will be created dynamically, which
rendered my code useless, and is what lead me to perform further
diagnostics and trace upstream.

What I want to know, is if someone could place parens to help me better
understand the precedence order in the last two lines. I know they are
legal as they do work, but I don't know how the interpreter is
interpreting them:

while ( my $ledger_ref = $sth->fetchrow_hashref ) {

    # print Dumper $ledger_ref;
    # next();

    my $amount      = $ledger_ref->{amount};
    my $payment     = $ledger_ref->{payment};
    my $username    = $ledger_ref->{username};

    # print "$amount :: $payment :: $username\n";

    $user_ref->{$username}{payment} += $payment ||= $payment;
    $user_ref->{$username}{amount}  += $amount  ||= $amount;


Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About