>
> Hello Li
>
> About the _permitted hash key, the perltoot tutorial
> says
>
> + I could have avoided the "_permitted" field
> entirely, but I wanted to
> + demonstrate how to store a reference to class data
> on the object so you
> + wouldn't have to access that class data directly
> from an object method.
>
> So the point of the class data %fields is to
> restrict autoloaded methods to the
> expected ones, while the point of putting a
> reference to it in the object data
> is, as Tom says, to demonstrate how class data can
> be accessed indirectly from
> within an object method.
>
> Preventing the module from autoloading non-permitted
> methods has the same
> purpose as 'use strict "vars"', i.e. to prevent a
> misspelled name producing
> obscure runtime bugs. Without the _permitted hash, I
> could write:
>
> my $me = new Person;
> $me->nane('Rob');
> die unless $me->name eq 'Rob';
>
> and I could be perplexed for a while over why it
> kept dying. Adding the check,
> the AUTOLOAD method would croak and immediately
> explain the problem.
>
> With regard to the reference to class data, later on
> in the tutorial there is a
> class Person with a class scalar $Census which keeps
> track of the number of
> objects that have been created. This scalar can be
> accessed via the 'population'
> method. Using the same technique, the 'new' and
> 'population' methods could be
> rewritten:
>
> my $Census = 0;
>
> sub new {
>
> my $class = shift;
>
> my $self = {
> NAME => undef,
> AGE => undef,
> PEERS => [],
> _census => \$Census,
> };
>
> ${$self->{_census}}++;
>
> bless ($self, $class);
> }
>
> sub population {
>
> my $self = shift;
>
> return ${$self->{_census}};
> }
>
> so that the access method has no need to refer
> directly to the package variable,
> in the same way that your AUTOLOAD method needn't
> use the %fields hash
> explicitly. I believe this is what Mumia meant about
> inheritance: if the method
> had directly accessed %fields hash then a subclass
> like Employee would have no
> way of reaching it, but once a reference to it
> appears in the object data then
> all is well once more.
>
> I hope this makes things clearer for you.
>
> Rob
>
> (After reading the tutorial further I realise that
> Tom Christiansen has made a
> very similar adaptation to the one I have described
> above. The main difference
> is that the 'population' method is written so that
> it can also be called as the
> class method Person::population as well as an object
> method $person->population.
> I hope this doesn't confuse you.)
>
Thanks Rob. I think now I get the points.
Li
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>