http://www.perlmonks.org?node_id=11104072


in reply to Re^2: Adding numbers from a loop
in thread Adding numbers from a loop

You have not said whether the other number is in the database or elsewhere in your code.

I assume not in the DB, or you'd just multiply the values in the columns: $sum += ($record->{total} * $record->{price});.

If from another source, and you need to look it up, say from a price sheet based on quantity ordered, make yourself a lookup table:

use strict; use warnings; use feature 'state', 'say'; use Test::More; use JSON; sub calc_rev { state %price_by_qty = ( 1 => 15, 3 => 10, 6 => 8, 10 => 5, ); my $qty = shift; return 0 if ! $qty; for my $level ( sort { $b <=> $a } keys %price_by_qty ) { return $qty * $price_by_qty{ $level } if $qty >= $level; } } # # mock getting an aref of rows for this test file my $json = do { local $/; <DATA> }; my $rows = decode_json( $json ); # my $revenue = 0; for my $row ( @{ $rows } ) { $revenue += calc_rev($row->{total}); } is( $revenue, 123, 'Revenue is 123. Mwahahahaa!'); done_testing; __DATA__ [ {"total":3}, {"total":6}, {"total":1}, {"total":2} ]
Output:
$ perl foo.pl ok 1 - Revenue is 123. Mwahahahaa! 1..1

Hope this helps!


The way forward always starts with a minimal test.