http://qs321.pair.com?node_id=178712

justanyone has asked for the wisdom of the Perl Monks concerning the following question:

Hi!!

I'm using Class::MethodMaker to construct a simple class with two vars. I want to initialize one var and leave the second as a defaulted value.

I think this means I need to do this:

use Class::MethodMaker '-sugar'; package Simple; make methods get_set => [qw(a b)], new_with_init => 'new'; sub init { my ($self, %args) = @_; #... what goes here? } ------ my $simp = new LogSimple(a => 4); print("a=" . $simp->a() . ", b = " $simp->b() . "\n"); ----------
How do I default the value of b to something? Class::MethodMaker has somewhat documentation on this, and I'm confused. My wife seems to think I'm not stupid (despite my opinion)... in which case this confusion might be something someone else has encountered...

Any hints? The perldoc / module documentation is somewhat limited.

Thanks for any assistance here,
Cordially yours,
-- Kevin J. Rice
http://www.JustAnyone.com or email is kevin at justanyone.com also.

Originally posted as a Categorized Question.

Replies are listed 'Best First'.
Re: Class::MethodMaker initialization of default values
by vishi83 (Pilgrim) on Oct 22, 2005 at 14:32 UTC
    Hi !!

    i think this would be better , if you want to make b's value to be default ..

    use constant SOMENAME ( a => 10, b=> 'DEFAULT');

    The rest is yours.. the code you've given will work fine..

Re: Class::MethodMaker initialization of default values
by samtregar (Abbot) on Jul 01, 2002 at 23:58 UTC
    How about (untested):

    package Simple; use Class::MethodMaker get_set => [qw(a b)], new_hash_init => 'hash_init'; sub new { my $pkg = shift; my %args = ( b => "default", @_ ); return $pkg->hash_init(%args); }

    -sam

Re: Class::MethodMaker initialization of default values
by justanyone (Acolyte) on Jul 02, 2002 at 16:54 UTC
    Okay, So this helped but it didn't solve it. I finally played with this enough - the real answer is (tested as correct):
    package Simple; use Class::MethodMaker get_set => [qw(a b)], new_with_init => 'new'; sub init { my $self = shift; my %in_args = @_; my %default_args = ( b => "default"); my %final_args = (%default_args, %in_args); foreach my $thiskey (keys(%final_args)) { $self->{$thiskey} = $final_args{$thiskey}; } return; } -------------- in use_it.pl --------- use Simple; my $test = new Simple (a=>1); # now a==1, b==default. my $test = new Simple (a=>1, b=>2); # now a==1, b==2.
    I've reported the contents of this posting to the Class::MethodMaker author to request that this information be included in the readme, or a modification to the module be made so it's easier to do.

    Thanks for the assistance, samtregar, you started me on the right path. I appreciate it.

    Cordially, -- Kevin