The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Getopt::ArgParse::Namespace;

use Carp;
use strict;
use warnings;

sub new {
    my $class = shift;
    my $real_class = ref $class || $class;

    my $self = {};

    bless $self, $real_class;
}

sub set_attr {
    my $self = shift;
    my ($dest, $values) = @_;

    $self->{'-values'}{$dest} = $values;
}

sub get_attr {
    my $self = shift;
    my ($dest) = @_;

    confess "Must provide $dest" unless $dest;

    return $self->{'-values'}{$dest} if  exists $self->{'-values'}{$dest};

    return undef;
}

our $AUTOLOAD;

sub AUTOLOAD {
    my $sub = $AUTOLOAD;

    (my $dest = $sub) =~ s/.*:://;

    my $self = shift;

    if ( exists $self->{'-values'}{$dest} ) {
        my $values = $self->{'-values'}{$dest};
        if (ref($values) eq 'ARRAY') {
            return wantarray ? @$values : $values;
        } elsif (ref($values) eq 'HASH') {
            return wantarray ? %$values : $values;
        } else {
            return $values;
        }
    } else {
        croak "unknown option: $dest";
    }
}

sub DESTROY { }

1;