use strict; use warnings; use 5.010; my %lanes = ( 1 => [ 200900 .. 202543 ], 2 => [ 202544 .. 204187 ], 3 => [ 204188 .. 205831 ], 4 => [ 205832 .. 207475 ], 5 => [ 207476 .. 210119 ], 6 => [ 210120 .. 211763 ], 7 => [ 211764 .. 213407 ], 8 => [ 213408 .. 215051 ], ); my %lookup = map { local $" = q{|}; ( qr{^(?:@{ $lanes{ $_ } })$}, $_ ) } keys %lanes; my @toTest = ( 175924, 203786, 208293 ); OUTER: foreach my $test ( @toTest ) { INNER: foreach my $rxCheck ( keys %lookup ) { if ( $test =~ $rxCheck ) { say qq{$test -- $lookup{ $rxCheck }}; next OUTER; } } say qq{$test -- No match!}; }