Asterisk-LCR
view release on metacpan or search on metacpan
lib/Asterisk/LCR/Locale.pm view on Meta::CPAN
package Asterisk::LCR::Locale;
use base qw /Asterisk::LCR::Object/;
use warnings;
use strict;
sub new
{
my $class = shift;
my $self = $class->SUPER::new (id => @_) || return;
$self->parse();
return $self;
}
# does global => local => global ($prefix) conversion
sub normalize
{
my $self = shift;
my $prefix = shift;
return $self->local_to_global ($self->global_to_local ($prefix));
}
sub global_to_local
{
my $self = shift;
my $num = shift;
$self->{global_to_local_cache}->{$num} ||= do {
my $map = $self->{global_to_local};
foreach my $prefix ( sort { length ($b) <=> length ($a) } keys %{$map} )
{
my $val = $map->{$prefix};
$num =~ s/^_$prefix/_$val/ and return ($prefix =~ /^\d*$/) ? $num : $self->global_to_local ($num);
$num =~ s/^$prefix/$map->{$prefix}/ and return ($prefix =~ /^\d*$/) ? $num : $self->global_to_local ($num);
}
$num;
};
return $self->{global_to_local_cache}->{$num};
}
sub local_to_global
{
my $self = shift;
my $num = shift;
$self->{local_to_global_cache}->{$num} ||= do {
my $map = $self->{local_to_global};
foreach my $prefix ( sort { length ($b) <=> length ($a) } keys %{$map} )
{
my $val = $map->{$prefix};
$num =~ s/^_$prefix/_$val/ and return ($prefix =~ /^\d*$/) ? $num : $self->local_to_global ($num);
$num =~ s/^$prefix/$map->{$prefix}/ and return ($prefix =~ /^\d*$/) ? $num : $self->local_to_global ($num);
}
$num;
};
return $self->{local_to_global_cache}->{$num};
}
sub validate
{
( run in 1.478 second using v1.01-cache-2.11-cpan-8dfa8b56332 )