in reply to Inheritance and Constants

You gave value to your elements that assume the elements can be ORed together, but subs element and transmute assume otherwise. The following would remove this ambiguity.
use constant Earth => 0; use constant Air => 1; use constant Fire => 2; use constant Water => 3; my @elmt_name = qw( Earth Air Fire Water ); # Gorgon::element return $elmt_name[ $self->{element} ]; # Gorgon::Euryale::transmute $elmt = ($elmt + 1) % 4; # Gorgon::Stheno::transmute $elmt = ($elmt - 1) % 4;

Also, I find it funny that element accepts a number when used as a setter, but returns a string when used as a getter.