in reply to OOP safety

The fault in your example lies entirely by the package package Person::Resumefied. The code as given has only one way of setting the job attribute, and that's by calling the subroutine Person::new. Your subclass is taking over, it's constructor is defining all the objects attributes. It's wrong to depend on a superclass to have access to the attributes if you take control yourself.

Of course, the entire idea of doing OO programming, and scribble all your attributes in a share hash is utterly flawed, and is as bad as using nothing but global variables, no namespaces and certainly no strict, but that's a rant I've given many times already.

Abigail