develooper Front page | perl.module-authors | Postings from December 2003

Re: New module Algorithm::Interval2Prefix

Thread Previous | Thread Next
Lars Thegler
December 2, 2003 12:42
Re: New module Algorithm::Interval2Prefix
Message ID:
On Monday, December 01, 2003 11:24 AM, Fergal Daly wrote:
>>     Taking an interval as input, this module will construct the
>>     smallest set of prefixes, such that all numbers in the interval
>>     will match exactly one of the prefixes, and no prefix will match
>>     a number not in the interval.
> You need to say something about the length of the number because as it
> 3000-3999 produces just 3 and there are a lot of numbers that start
> with 3 but which aren't in the interval.

I understand you angle. But this all stems from trying to generate a routing
table for a telephony switch. In telephony switches, the dialled number is
analysed starting from the first (left-most) digit, and the routing decision
is made as soon as possible (this will often be *before* the final digit has
been dialled[1]). So, if there is a routing entry '3456', then number
'34567' would be routed in the same way as '3456789'.

I totally agree that when generating prefixes from number intervals, this
depends squarely on the involved numbers being the same number of digits.
But telephone numbers *will* be the same length in the same prefix-area[2].
And when using this algorithm for handling of IP-adresses, the numbers are
also always the same length.

Obviously, if the numbers are of variable length, then we have a different
situation, that cannot easily be handled this way. Maybe I should check $lo
and $hi to ensure they are the same length...

> 2900-3999 into a single regex string which will match if and only
> if the number is in any of the intervals
> ^(?:29\d{2}|3\d{3})$

Intersting proposistion. Assuming that $lo and $hi are the same length, then

  $n = length($lo)-length($_);
  $p .= $n ? "\d{$n}" : '';

to each prefix should do the trick. I'll be adding that to the module.

Thanks for the feedback!


[1] This will not be the case for mobile phones, which use 'en-bloc'
signalling ('all-digits-at-once') instead of the described 'overlap'
signalling ('one-digit-at-a-time'). The routing descision will be made in
the same way, though.

[2] Since this is the only way the telephony switch can know when the number
you are dialling is 'complete'.

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About