mrborisguy has asked for the wisdom of the Perl Monks concerning the following question:
I feel like this is a very simple question, but I can't seem to find the answer.
I'm trying to create a new class. Most of my accessors are dynamically generated with AUTOLOAD, but I have a few that need to verify data instead of blindly accepting it. Take this code as example:
sub new { my $class = shift; my %args = @_; my %hash = ( _foo => 0, _bar => 0, _baz => 0, ); my $self = bless( \%hash, $class ); ... return $self; } sub AUTOLOAD { # do stuff to auto-generate accessors for anything in my %hash + (except without preceding underscore), so "foo" and "bar" } sub baz { # actually verify input data here }
Now, where my "..." is in the new method, I was doing something like this:
foreach ( keys %args ) { if( exists $hash{ '_' . $_ } ) { $self->{ $_ } = $args{ $_ }; } }
So if I called my new as This::Object->new( bar=>7, baz=>9 );, this would just put each value into my object. But, obviously, I want to actually verify this data, so what I really want to do is call the appropriate accessor method, but I can't seem to figure out how. So, in this example, the 'new' method would do something like call $self->bar( 7 ) and $self->baz( 9 )
Can somebody please point me to the appropriate documentation for this? It almost certainly has to be very common-place in class creation. Thanks in advance for the help!
-Bryan
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Calling arbitrary method from new
by chromatic (Archbishop) on Jun 10, 2005 at 03:32 UTC | |
by mrborisguy (Hermit) on Jun 10, 2005 at 03:41 UTC | |
by tlm (Prior) on Jun 10, 2005 at 03:50 UTC | |
by hv (Prior) on Jun 10, 2005 at 08:21 UTC |