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


in reply to doing the same thing but with less code

You could drop a lot of code starting from this example:
use strict; use warnings; use Test::More qw/no_plan/; my @interval = ( [ 0, '' ], [ 5, 'orange' ], [ 10, 'grey' ], [ 15, 'blue' ], ); sub interval { my $x = shift; # The special case 0 should be threated separately my $counter = 1; while( $counter <= $#interval && $x > $interval[ $counter ][ 0 ] ) + { ++$counter; } return $interval[ $counter ][ 1 ]; } ok( interval( 3 ) eq 'orange', "0 < 3 <= 5" ); ok( interval( 7 ) eq 'grey', "5 < 7 <= 10" ); ok( interval( 10 ) eq 'grey', "5 < 10 <= 10" );

Update: Oops. Wrong order of clauses in the while condition. Now fixed.