#
-# $Id: Encoder.pm,v 0.2 2002/04/08 18:08:07 dankogai Exp dankogai $
+# $Id: Encoder.pm,v 2.0 2004/05/16 20:55:17 dankogai Exp $
#
package Encode::Encoder;
use strict;
use warnings;
-our $VERSION = do { my @r = (q$Revision: 0.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
require Exporter;
our @ISA = qw(Exporter);
-our @EXPORT = qw ( encoder );
+our @EXPORT_OK = qw ( encoder );
our $AUTOLOAD;
-our $DEBUG = 0;
+sub DEBUG () { 0 }
use Encode qw(encode decode find_encoding from_to);
use Carp;
sub encoder{ __PACKAGE__->new(@_) }
sub data{
- my ($self, $data) = shift;
+ my ($self, $data) = @_;
if (defined $data){
$self->{data} = $data;
return $data;
}
sub DESTROY{ # defined so it won't autoload.
- $DEBUG and warn shift;
+ DEBUG and warn shift;
}
sub 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;
+ DEBUG and warn $self->{encoding}, " => ", $obj->name;
if ($self->{encoding}){
from_to($self->{data}, $self->{encoding}, $obj->name, 1);
}else{
Encode::Encoder -- Object Oriented Encoder
=head1 SYNOPSIS
-
+
use Encode::Encoder;
# Encode::encode("ISO-8859-1", $data);
- Encoder->new($data)->iso_8859_1; # OOP way
+ Encode::Encoder->new($data)->iso_8859_1; # OOP way
# shortcut
+ use Encode::Encoder qw(encoder);
encoder($data)->iso_8859_1;
# you can stack them!
encoder($data)->iso_8859_1->base64; # provided base64() is defined
=head1 ABSTRACT
-B<Encode::Encoder> allows you to use Encode via OOP style. This is
-not only more intuitive than functional approach, but also handier
-when you want to stack encodings. Suppose you want your UTF-8 string
-converted to Latin1 then Base64, you can simply say
+B<Encode::Encoder> allows you to use Encode in an object-oriented
+style. This is not only more intuitive than a functional approach,
+but also handier when you want to stack encodings. Suppose you want
+your UTF-8 string converted to Latin1 then Base64: you can simply say
my $base64 = encoder($utf8)->latin1->base64;
my $latin1 = encode("latin1", $utf8);
my $base64 = encode_base64($utf8);
-or lazier and convolted
+or the lazier and more convoluted
my $base64 = encode_base64(encode("latin1", $utf8));
=item *
-There are at least two instance variable stored in hash reference,
+There are at least two instance variables stored in a hash reference,
{data} and {encoding}.
=item *
-When there is no method, it takes the method name as the name of
-encoding and encode instance I<data> with I<encoding>. If successful,
-instance I<encoding> is set accordingly.
+When there is no method, it takes the method name as the name of the
+encoding and encodes the instance I<data> with I<encoding>. If successful,
+the instance I<encoding> is set accordingly.
=item *
=head2 Predefined Methods
-This module predefines the methods below;
+This module predefines the methods below:
=over 4
=item $e = Encode::Encoder-E<gt>new([$data, $encoding]);
-returns the encoder object. Its data is initialized with $data if
-there, and its encoding is set to $encoding if there.
+returns an encoder object. Its data is initialized with $data if
+present, and its encoding is set to $encoding if present.
When $encoding is omitted, it defaults to utf8 if $data is already in
utf8 or "" (empty string) otherwise.
=item encoder()
-is an alias of Encode::Encoder-E<gt>new(). This one is exported for
-convenience.
+is an alias of Encode::Encoder-E<gt>new(). This one is exported on demand.
=item $e-E<gt>data([$data])
-when $data is present, sets instance data to $data and returns the
-object itself. otherwise the current instance data is returned.
+When $data is present, sets the instance data to $data and returns the
+object itself. Otherwise, the current instance data is returned.
=item $e-E<gt>encoding([$encoding])
-when $encoding is present, sets instance encoding to $encoding and
-returns the object itself. otherwise the current instance encoding is
+When $encoding is present, sets the instance encoding to $encoding and
+returns the object itself. Otherwise, the current instance encoding is
returned.
=item $e-E<gt>bytes([$encoding])
-decodes instance data from $encoding, or instance encoding if omitted.
-when the conversion is successful, the enstance encoding will be set
-to "" .
+decodes instance data from $encoding, or the instance encoding if
+omitted. If the conversion is successful, the instance encoding
+will be set to "".
The name I<bytes> was deliberately picked to avoid namespace tainting
-- this module may be used as a base class so method names that appear
=head2 Example: base64 transcoder
-This module is desined to work with L<Encode::Encoding>.
-To make the Base64 transcorder example above really work, you should
-write a module like this.
+This module is designed to work with L<Encode::Encoding>.
+To make the Base64 transcoder example above really work, you could
+write a module like this:
package Encode::Base64;
use base 'Encode::Encoding';
1;
__END__
-And your caller module should be like this;
+And your caller module would be something like this:
use Encode::Encoder;
use Encode::Base64;
encoder($data)->iso_8859_1->base64;
encoder($base64)->bytes('base64')->latin1;
-=head2 operator overloading
+=head2 Operator Overloading
This module overloads two operators, stringify ("") and numify (0+).
-Stringify dumps the data therein.
+Stringify dumps the data inside the object.
-Numify returns the number of bytes therein.
+Numify returns the number of bytes in the instance data.
They come in handy when you want to print or find the size of data.
=head1 SEE ALSO
-L<Encode>
+L<Encode>,
L<Encode::Encoding>
=cut