Additional tests: - is_fixed_line - is_geographic - is_network
Adapt Build.PL to the absence of lib/Number/Phone/FR/Full.pm: - select author mode if the file is missing - dist_version_from FR.pm if FR/Full.pm is missing
New versionning scheme: - Number::Phone::FR: m.nn (major/minor) - Number::Phone::FR::Full: m.nnyyddd (yy=year, ddd=day of year) - dist: m.nnyyddd "./Build parse" force deletion of "./Build" if the version changed.
Import changes: - croak instead of die - load implementation class at import time instead of at ->new time (less calls) - open import for alternative implementations - forbid direct load of an implementation class Update 'Build parse' final code check to use indirect load.
Change the implementation selection: selection is now by calling package instead of being with lexical scope ($Number::Phone::FR::Class). This makes the selection more predictable, and is more module-friendly. Implementation selection is stored for each package and the calling stack for ->new is examined to find the top package that selected a particular implementation.
Use _num() everywhere for class/number extraction.
Number::Phone::FR::Simple is a (mostly empty) subclass of Number::Phone::FR.
Reorganize lines in Number::Phone::FR for further changes.
Refactor the Number::Phone::FR implementation selection. No intended functional changes.
Implement the ->operator in Number::Phone::FR::Full. This relies on ARCEP static data and do not take in account the "portabilité du numéro".
Implement RE_SUBSCRIBER in Number::Phone::FR::Full. Add missing ^/$ in RE_FULL in Number::Phone::FR::Full.
Regexp may match the subscriber line in different captures, so handle the result instead of using only $1. Also stricter checks for is_geographic, is_fixed, is_mobile.
We have no info to implement Number::Phone semantics.