Why are you assigning to $self->{"property$n"} and then returning $self->{property}?

Your @_ test also makes little sense to me. If you are trying to write get/set routines, you would want to get on a single routine, set on 2, and think about throwing an error on 3 or more. Your methods as written require an extra argument to say, "set, pretty please".

I was also going to chide you for having methods called property1, property2 without thinking through what you are going to do if you had more than 2 properties, and then I realized that you were likely talking properties of an object, not a computer representation of physical properties. :-)

Oh, right. If you are going to have a lot of very similar code, then I think that autogenerating can be good. (Assuming, of course, that the person who will take over the code is capable of figuring out autogenerated code...) For instance:

Why are you assigning to $self->{"property$n"} and then returning $self->{property}?

That is a typo, which I then copied.

Your @_ test also makes little sense to me. If you are trying to write get/set routines, you would want to get on a single routine, set on 2, and think about throwing an error on 3 or more.

Yes. This is another typo. Should have been >=, not >. The error on 3 or more makes sense, but I usually forget those.

Fortunately, I have Attribute::Property, so I can even write working code when I'm as tired as I was when I wrote that node.

If you are going to have a lot of very similar code, then I think that autogenerating can be good.

I've put all my favourite object-property-code in Attribute::Property, together with xmath. It was originally made to allow $foo->bar = 14; syntax, but I use it now mostly because it makes creating classes much easier. (And when I'm tired, apparently this means I make less mistakes. See the other node: I made no mistake in the lines that use : Property :-))

Therefore code which is lazily loaded by do, require, AUTOLOAD, Apache::Reload etc won't have existed at the right time for the attributes to actually have been properly installed, therefore leading to mysteriously failing code.

Basically what I am saying is that attributes, while they certainly win on the "cool tricks" scale, are not something that I really want to depend on.