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
In reply to Re: alternatives to if and series of elsif
by tlm
in thread alternatives to if and series of elsif
by kiat
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |