You could do this using compiled regular expressions for each range as keys to a lookup hash.
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!}; }
The output.
175924 -- No match! 203786 -- 2 208293 -- 5
I hope this is of interest.
Cheers,
JohnGG
In reply to Re: match with elements in array
by johngg
in thread match with elements in array
by finder003
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |