Whatever the question was, here's an answer:
use constant ST => ('-1', ' =', ' 0', ' =', ' 1');
printf ' ' x 8 . "%s\n", join ' ', map sprintf('%2d', $_), -9 .. 10;
while (<DATA>) {
my ($l, $r) = split;
printf "[%2d %2d] %s\n", $l, $r, join ' ',
map { (ST)[ ($_ <=> $l) + ($_ <=> $r) + 2 ] } -9 .. 10;
}
__DATA__
1 4
2 5
3 7
0 3
-1 5
-8 -2
Output:
-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
[ 1 4] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 = 0 0 = 1 1 1 1 1 1
[ 2 5] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 = 0 0 = 1 1 1 1 1
[ 3 7] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 = 0 0 0 = 1 1 1
[ 0 3] -1 -1 -1 -1 -1 -1 -1 -1 -1 = 0 0 = 1 1 1 1 1 1 1
[-1 5] -1 -1 -1 -1 -1 -1 -1 -1 = 0 0 0 0 0 = 1 1 1 1 1
[-8 -2] -1 = 0 0 0 0 0 = 1 1 1 1 1 1 1 1 1 1 1 1
I don't see why 0 should not be legal.
<=> is not a ternary operator.