One thing that I would consider, but that would require a bit of a rewrite, is to keep "Math::Vector" general to n dimensions, and create "Math::Vector::3D" for the specific 3-dimensional extentions that you have (eg x(), y(), z()). You'd have to add some size checks on the operations that take two vectors, of course.
-----------------------------------------------------
Dr. Michael K. Neylon - mneylon-pm@masemware.com
||
"You've left the lens cap of your mind on again, Pinky" - The Brain
"I can see my house from here!"
It's not what you know, but knowing how to find it if you don't know that's important