http://www.perlmonks.org?node_id=223006


in reply to Re: $foo->bar = 14;
in thread $foo->bar = 14;

One problem with the approach you set forth is that it doesn't survive subclassing.

Eh?

use strict; use warnings; { package Foo; sub new { bless {}, shift }; BEGIN { no strict 'refs'; for my $property (qw/foo bar/) { *$property = sub : lvalue { $_[0]->{$property} }; } } } { package Bar; use base qw(Foo); BEGIN { no strict 'refs'; for my $property (qw/fribble ni/) { *$property = sub : lvalue { $_[0]->{$property} }; } } }; my $o = Bar->new; $o->foo=1; $o->bar=2; $o->fribble=3; $o->ni=4; print join(', ', $o->foo, $o->bar, $o->fribble, $o->ni), "\n"; # produces # 1, 2, 3, 4

or am I missing something?

Replies are listed 'Best First'.
Re: Re^2: $foo->bar = 14;
by dws (Chancellor) on Dec 30, 2002 at 18:52 UTC
    or am I missing something?

    No, I missed something. I was reacting based on past misadventures with something very similar, without having read your code carefully enough. What you've written will indeed survive subclassing, though debugging through those generated methods is still going to be a problem. Mea culpa.

      I'm not the author of the code :-)

      Personally I very rarely generate accessors - not because I dislike generating them, but because I so rarely have a situation where bare-access to the object attributes is appropriate.

      Since many perl coders seem to spend a lot of time worrying about generating accessors I guess I must be weird!

      That said, the times I have generated accessors I've not come across debugging issues. I'm curious what problems you've encountered - can you illustrate?