in reply to alternatives to if and series of elsif
This does the same thing as your compare
use POSIX 'ceil'; use List::Util qw( min max ); my $Base = 15; my $Max = 24; my $Incr = 2000; sub compare { my ( $points, $quota ) = @_; my $new = max( min( $Max, ( ceil( $points/$Incr ) - 1 ) + $Base ), $ +Base ); return $new > $quota ? $new : $Base; }
Update: Fixed bug in response to kiat's comment. (In my original version, the min was applied, incorrectly, at the test in the return statement not in the earlier assignment. This produced results that differed from those of kiat's original compare for $points > 2000.) Also, my original tested only for non-zero $points whereas it should have tested for positive $points. But this amounts to including a max in the definition of $new, which simplifies the last test further. I fixed that too.
the lowliest monk
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: alternatives to if and series of elsif
by kiat (Vicar) on Jul 03, 2005 at 11:59 UTC | |
by tlm (Prior) on Jul 03, 2005 at 13:38 UTC | |
by kiat (Vicar) on Jul 03, 2005 at 15:56 UTC |