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

rsFalse has asked for the wisdom of the Perl Monks concerning the following question:

I had a task for myself: given interval and a number, find if it is before, in, or after an interval? It can be find using two basic comparisons. But here I tried to use ternary <=>:
use POSIX; while(<DATA>){ chomp; ($l, $r)=split/ /; printf "[%2d %2d] ", $l, $r; for $i(-9..10){ $i or print "|"; printf "%2d ", floor (($i - $l ) / ($r - $l +1 )) <=> 0 } print "\n" } __DATA__ 1 4 2 5 3 7 0 3 -1 5 -8 -2
OUTPUT:
[ 1 4] -1 -1 -1 -1 -1 -1 -1 -1 -1 |-1 0 0 0 0 1 1 1 1 1 1 [ 2 5] -1 -1 -1 -1 -1 -1 -1 -1 -1 |-1 -1 0 0 0 0 1 1 1 1 1 [ 3 7] -1 -1 -1 -1 -1 -1 -1 -1 -1 |-1 -1 -1 0 0 0 0 0 1 1 1 [ 0 3] -1 -1 -1 -1 -1 -1 -1 -1 -1 | 0 0 0 0 1 1 1 1 1 1 1 [-1 5] -1 -1 -1 -1 -1 -1 -1 -1 0 | 0 0 0 0 0 0 1 1 1 1 1 [-8 -2] -1 0 0 0 0 0 0 0 1 | 1 1 1 1 1 1 1 1 1 1 1
For example I can use the answer as the index of list of 3 elements:
qw(in after before)[find($left, $right, $n)]