use Class::Struct;
struct Widget =>
{
    total_widgets => '@',
    widgets_per_hour => '%'
}

---------------------------

package Widget;
use Carp;

sub new {
    my ($class, %paras) = @_;
    my %object;
    if (exists $paras{total_widgets}) {
        if (ref $paras{total_widgets} eq "ARRAY") {
            $object{'total_widgets'} = $paras{total_widgets};
        } else {
            die;
        }
    } else { 
        $object{'total_widgets'} = [ ];
    }
    $object{'widgets_per_hour'} = { };
    bless \%object, $class;
}

sub total_widgets {
    my ($object, $index, $newval) = @_;
    croak "Too many arguments to total_widgets" if @_ > 3;
    $object->{'total_widgets'}->[$index] = $newval if @_ > 2;
    return $object->{'total_widgets'}->[$index] if @_ > 1;
    croak "Not enough arguements";
}


sub widgets_per_hour{
    my ($object, $key, $newval) = @_;
    croak "Too many arguments to widgets_per_hour" if @_ > 3;
    $object->{'widgets_per_hour''}->{$key} = $newval if @_ > 2;
    return $object->{'widgets_per_hour'}->{$key} if @_ > 1;
}

