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 )