I think using given Switch statements gives you much more flexibility, as it uses smart matching and can do lots of clever things. You do have to type a bit more but it's worth it ;)
So something like this :-
use v5.14;
use warnings;
sub ident_number {
my ($num) = @_;
given ($num) {
when ('01') {
say 'geographic';
}
when (/^\d+$/ && $_ >= 124 && $_ <= 140) {
say '124 - 140';
}
when ([143 .. 146, 148 .. 149]) {
say "$_ other stuff";
}
when ([181 ..189]) {
say '181 -- 189';
}
default {
say "$_ not found";
}
}
}
my @tests = qw/ 01 02 125 127 186 500 143 149 189/;
for (@tests) {
ident_number($_);
}