#========================================================================
#
# Badger::Codec::Encode
#
# DESCRIPTION
# A codec wrapper for Encode
#
# AUTHOR
# Andy Wardley <abw@wardley.org>
#
#========================================================================
package Badger::Codec::Encode;
use Badger::Class
version => 0.01,
base => 'Badger::Codec';
use Encode qw();
use bytes;
sub encode {
my $self = shift;
# No, really, it's OK. This isn't one of those kind of GOTOs.
# This is an Offically OK version of GOTO which is really a special
# kind of subroutine call. See: perldoc -f goto
goto &Encode::encode;
}
sub decode {
my $self = shift;
# we use goto rather than a call because a) it's quicker (the call
# stack frame is re-used) and b) because the prototypes for encode()
# and decode() would require us to shift all the arguments off the
# stack in order to pass them to encode()/decode() in an orderly
# fashion, e.g. my ($enc, $data) = @_; Encode::encode($enc, $data)
# rather than: Encode::encode(@_); # not allowed - prototype mismatch
goto &Encode::decode;
}
sub encoder {
\&Encode::encode;
}
sub decoder {
\&Encode::decode;
}
1;
__END__
=head1 NAME
Badger::Codec::Encode - codec wrapper around Encode
=head1 SYNOPSIS
use Badger::Codec::Encode;
my $codec = Badger::Codec::Encode->new();
my $encoded = $codec->encode( utf8 => "...some utf8 data..." );
my $decoded = $codec->decode( utf8 => $encoded );
=head1 DESCRIPTION
This module is a subclass of L<Badger::Codec> implementing a very thin wrapper
around the L<Encode> module. It exists only to provide a consistent API with
other L<Badger::Codec> modules and to facilitate codec chaining.
You would normally use a codec via the L<Badger::Codecs> module.
use Badger::Codecs
codec => 'encode';
my $encoding = 'UTF-8';
my $uncoded = "...some UTF-8 data...";
my $encoded = encode($encoding, $uncoded);
my $decoded = decode($encoding, $encoded)
The above example is identical to using the L<Encode> module directly:
use Encode; # also exports encode()/decode()
In addition, a L<Badger::Codec::Encode> object will be available via
the C<codec()> subroutine.
my $encoded = codec->encode($encoding, $uncoded);
my $decoded = codec->decode($encoding, $encoded)
=head1 METHODS
=head2 encode($encoding, $data)
Method for encoding data which forwards all arguments to the L<Encode>
C<encode()> method. The first argument is the encoding,
the second is the data to encode.
$encoded = Badger::Codec::Encode->encode( utf8 => $data );
=head2 decode($encoding, $data)
Method for decoding data which forwards all arguments to the L<Encode>
C<decode()> method. The first argument is the encoding, the second is the data
to decode.
$decoded = Badger::Codec::Encode->decode( utf8 => $encoded );
=head2 encoder()
This method returns a reference to the real subroutine that's doing all the
encoding work, i.e. the C<encode()> function in L<Encode>.
=head2 decoder()
This method returns a reference to the real subroutine that's doing all the
encoding work, i.e. the C<decode()> method in L<Encode>.
=head1 AUTHOR
Andy Wardley L<http://wardley.org/>
=head1 COPYRIGHT
Copyright (C) 2005-2009 Andy Wardley. All rights reserved.
=head1 SEE ALSO
L<Encode>, L<Badger::Codecs>, L<Badger::Codec>, L<Badger::Codec::Unicode>.
=cut
# Local Variables:
# mode: Perl
# perl-indent-level: 4
# indent-tabs-mode: nil
# End:
#
# vim: expandtab shiftwidth=4: