use POSIX 'fmod'; sub angle { my($b1,$b2) = @_; my $b = fmod( ($b2 - $b1 + 720) , 360); $b -= 360 if $b > 180; $b += 360 if $b < -180; return $b; } @bearings = ( 20, 45, -45, 45, -85, 90, -95, 90, -45, 125, -45, 145, 29.4803, -88.6381, -78.3251, -159.036, -70099.74233810938, 29840.67437876723, -165313.6666297357, 33693.9894517456, 1174.8380510598456, -154146.66490124757, 60175.77306795546, 42213.07192354373 ); while(my ($b1,$b2) = splice(@bearings,0,2)) { printf "%10.2f %10.2f = %8.2f\n", $b1, $b2, angle($b1,$b2); }