in reply to poor Perl OO design hinders maintenance effectiveness..

$subject =~ s/Perl //;

If you modify is_built as you show at the end, it's no longer a class method and wouldn't work when called Gadget->is_built( $foo ), but we'll presume that's a typo :).

If you really want to disallow calls on instances, check that the first argument isn't a reference (and you can even go as far as checking that it's not a reference and it isa('Gadget')). Perl is giving you the freedom to shoot yourself in the foot, or to post armed guards to shoot improper callers in thier feet.