in reply to Optional parameters in new() method

You could try hash slices. :-)
@{$self}{keys %hash} = @hash{keys %hash};
That will do pretty much exactly what you're doing.

However, as a stylistic note, if you're doing OO for the benefits of OO (encapsulation and the like), then this is generally bad. You're allowing someone to mess with your internals. Not the best plan.

But, if you're using OO as a glorified data structure (which is perfectly fine!), then this is just fine.

------
We are the carpenters and bricklayers of the Information Age.

Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.