perl_mlb

 view release on metacpan or  search on metacpan

os2/Encode/Encoder.pm  view on Meta::CPAN

#
# $Id: Encoder.pm,v 0.7 2003/07/08 21:52:14 dankogai Exp $
#
package Encode::Encoder;
use strict;
use warnings;
our $VERSION = do { my @r = (q$Revision: 0.7 $ =~ /\d+/g); sprintf "%d."."%02d"  x $#r, @r };

require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw ( encoder );

our $AUTOLOAD;
sub DEBUG () { 0 }
use Encode qw(encode decode find_encoding from_to);
use Carp;

sub new{
    my ($class, $data, $encname) = @_;
    unless($encname){
	$encname = Encode::is_utf8($data) ? 'utf8' : '';
    }else{
	my $obj = find_encoding($encname) 
	    or croak __PACKAGE__, ": unknown encoding: $encname";
	$encname = $obj->name;
    }
    my $self = {
		data     => $data,
		encoding => $encname,
	       };
    bless $self => $class;
}

sub encoder{ __PACKAGE__->new(@_) }

sub data{
    my ($self, $data) = @_;
    if (defined $data){
	$self->{data} = $data;
	return $data;
    }else{
	return $self->{data};
    }
}

sub encoding{
    my ($self, $encname) = @_;
    if ($encname){
	my $obj = find_encoding($encname) 
	    or confess __PACKAGE__, ": unknown encoding: $encname";
	$self->{encoding} = $obj->name;
	return $self;
    }else{
	return $self->{encoding}
    }
}

sub bytes {
    my ($self, $encname) = @_;
    $encname ||= $self->{encoding};
    my $obj = find_encoding($encname) 
	    or confess __PACKAGE__, ": unknown encoding: $encname";
    $self->{data} = $obj->decode($self->{data}, 1);
    $self->{encoding} = '' ;
    return $self;
}

sub DESTROY{ # defined so it won't autoload.
    DEBUG and warn shift;
}

sub AUTOLOAD {
    my $self = shift;
    my $type = ref($self)
	or confess "$self is not an object";
    my $myname = $AUTOLOAD;
    $myname =~ s/.*://;   # strip fully-qualified portion
    my $obj = find_encoding($myname) 
	    or confess __PACKAGE__, ": unknown encoding: $myname";
    DEBUG and warn $self->{encoding}, " => ", $obj->name;
    if ($self->{encoding}){
	from_to($self->{data}, $self->{encoding}, $obj->name, 1);
    }else{
	$self->{data} = $obj->encode($self->{data}, 1);
    }
    $self->{encoding} = $obj->name;
    return $self;
}

use overload 
    q("") => sub { $_[0]->{data} },



( run in 0.864 second using v1.01-cache-2.11-cpan-ceb78f64989 )