Randy W. Sims wrote:
I have the code below in a module I'm writing (Complete module is at <www.thepierianspring.org/CPAN-Metadata-0.00_01.tar.gz>). The three methods _mk_*_accessor are nearly identical. I would like to simplify this code, but I want to avoid a giant eval since it makes code more difficult to maintain. Any ideas?

Thanks,
Randy.



diff -y array hash only; see attachment in-line...)


-Bill- __Sx__________________________________________ http://youve-reached-the.endoftheinternet.org/
Differences only -

sub _mk_array_accessor {                                      | sub _mk_hash_accessor {

    my @arg  = @_;                                            |     my %arg  = @_;

    my $ret = $self->{_metadata}{$attr} || [];                |     my $ret = 
$self->{_metadata}{$attr} || {};

    if (@arg) {                                               |     if (%arg) {

        my $is_valid = eval "\$spec->V_$attr([EMAIL PROTECTED])";         |         my 
$is_valid = eval "\$spec->V_$attr(\%arg)";
        if ($is_valid) {                                                if ($is_valid) 
{
          $self->{_metadata}{$attr} = [EMAIL PROTECTED];                  |           
$self->{_metadata}{$attr} = \%arg;

          carp "Invalid value for $attr: [EMAIL PROTECTED]";             |           
carp "Invalid value for $attr: {%arg}";

        $self->{_metadata}{$attr} = [EMAIL PROTECTED];                    |         
$self->{_metadata}{$attr} = \%arg;

    return @$ret;                                             |     return %$ret;

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>

Reply via email to