use strict;
use 5.004;
use Carp;

package Palm::Progect::Converter;

=head1 NAME

Palm::Progect::Converter - delegate to specific Conversion module based on format


Delegate to a specific Conversion class based on format.

For instance to create a Palm::Progect::Converter::Text conversion object,
the user can do the following:

    my $converter = Palm::Progect::Converter->new(
        format => 'Text',
        # ... other args ...

Behind the scenes, this call will be translated into the equivalent of:

    require 'Palm/Progect/Converter/';
    my $record = Palm::Progect::Converter::Text->new(
        # ... other args ...

See also the individual converter objects.


use CLASS;
use base 'Class::Accessor';

my @Accessors = qw(


# Delegate to Palm::Progect::Converter::CSV, Palm::Progect::Converter::HTML, etc.

sub new {
    my $proto      = shift;
    my $this_class = ref $proto || $proto;

    my @base_class  = split /::/, $this_class; # e.g. ('Palm', 'Progect', 'Converter')

    my %args = @_;

    my $converter_format = delete $args{'format'};

    my $module_path  = File::Spec->join(@base_class, $converter_format . '.pm');
    my $module_class = join '::', @base_class, $converter_format;

    require $module_path;

    # Initialize the object with the standard Converter accessors

    my %auto_init;
    foreach my $accessor (@Accessors) {
        $auto_init{$accessor} = delete $args{$accessor};
    my $converter = $module_class->new(%args);

    foreach my $accessor (@Accessors) {
    return $converter;



=head1 AUTHOR

Michael Graham E<lt>mag-perl@occamstoothbrush.comE<gt>

Copyright (C) 2002-2005 Michael Graham.  All rights reserved.
This program is free software.  You can use, modify,
and distribute it under the same terms as Perl itself.

The latest version of this module can be found on

=head1 SEE ALSO