in reply to Dynamic Method Generation Using Class::Accessor

The following example forks for me:
package KLARF; use strict; use warnings; use base qw(Class::Accessor); my $s = 'foo'; my $x = bless {}; $x->{$s} = 'bar'; KLARF->mk_accessors($s); print $x->foo(), "\n";

So there doesn't seem to be a problem with generating the accessors at run time.

Maybe $key doesn't contain what you think it does? Since you only print out the upper cased version, maybe the case is wrong? Or it could contain non-printable characters.

Since you neither show nor input data nor how the methods are called it's a bit hard to find out what's really going on.

Anyway, do you really think you need these accessors? generating identical methods based on input data seems like not a really great idea, a hash or a generic accessor might be a better idea.

Replies are listed 'Best First'.
Re^2: Dynamic Method Generation Using Class::Accessor
by ~~David~~ (Hermit) on Aug 13, 2009 at 18:58 UTC
    Thanks for the input. I am trying to learn here, so could you elaborate on your comment about it not being a good idea to create the accessors. Would you recommend something like my $foo = $s->generic('foo'); Why is that beneficial (speed, maintainability?)? Thanks, David
      If you install methods for each new attribute, you install them in symbol table, which is shared among all objects.

      So whenever you install an accessor method for an object, all other objects get that too - although it doesn't make sense for them to have one.

      It also means that if you have a long running process, you might gather many methods which once were useful, but don't make sense anymore.

      Also consider the case where somebody might want to subclass your class, and can't know at the time of writing which methods your class will have - that's kinda painful.