Number-Phone-FR
view release on metacpan or search on metacpan
lib/Number/Phone/FR.pm view on Meta::CPAN
use utf8;
use strict;
use warnings;
package Number::Phone::FR;
# $VERSION is limited to 2 digits after the dot
# Other digits are reserved for ARCEP data versonning
# in Number::Phone::FR::Full
our $VERSION = '0.09';
use Number::Phone;
use parent 'Number::Phone';
use Carp;
use Scalar::Util 'blessed';
my %pkg2impl;
# Select the implementation to use via "use Number::Phone::FR"
sub import
{
my $class = shift;
croak "invalid sub-class" unless $class->isa(__PACKAGE__);
if ($class eq __PACKAGE__) {
if (@_) {
$class = $_[0];
$class =~ s/^:?(.)/\U$1/;
substr($class, 0, 0) = __PACKAGE__.'::';
my $level = 0;
my $pkg;
while (($pkg = (caller $level)[0]) =~ /^Number::Phone(?:::|$)/) {
$level++;
}
$pkg2impl{$pkg} = $class;
# Load the class
eval "require $class; 1" or croak "$@\n";
$class->isa(__PACKAGE__) or croak "$class is not a valid class";
}
} else {
#croak "unexpected arguments for import" if @_;
my $pkg = (caller)[0];
croak "$class is private" unless $pkg =~ m/^Number::Phone(?:::|$)/;
$pkg2impl{$pkg} = $class;
}
}
#END {
# foreach (sort keys %pkg2impl) {
# print STDERR "# $_ => $pkg2impl{$_}\n";
# }
#}
# Select the implementation based on $pkg2impl
sub _get_class
{
my ($class) = @_;
return $class if defined $class && $class ne __PACKAGE__;
my $level = 0;
my ($pkg, $impl);
while ($pkg = (caller $level)[0]) {
$impl = $pkg2impl{$pkg};
return $impl if defined $impl;
$level++;
}
# Default implementation
return __PACKAGE__;
}
use constant RE_SUBSCRIBER =>
qr{
\A
(?:
\+33 # Préfixe international (+33 numéro)
| (?:3651)?
(?:
[04789] # Transporteur par défaut (0) ou Sélection du transporteur
| 16 [0-9]{2} # Sélection du transporteur
) (?:033)? # Préfixe international (0033 numéro)
) ([1-9][0-9]{8}) # Numéro de ligne
\z
}xs;
use constant RE_FULL =>
qr{
\A (?:
1 (?:
0[0-9]{2} # Opérateur
| 5 # SAMU
| 7 # Police/gendarmerie
| 8 # Pompiers
| 1 (?:
2 # Numéro d'urgence européen
| 5 # Urgences sociales
| 6000 # 116000 : Enfance maltraitée
| 8[0-9]{3} # 118XYZ : Renseignements téléphoniques
| 9 # Enfance maltraitée
)
)
| 3[0-9]{3}
( run in 2.144 seconds using v1.01-cache-2.11-cpan-302cb4679cc )