I think that you confusion has more to do with "Object Oriented Programming" than with perl's implementation of it. Under "Structured Programming", it would make sense to call different subroutines, depending on configuration. Your scheme would be a reasonable implementation. Under "Object Oriented", objects that behave differently are not members of the same class. You can use subclass to model objects that are almost alike.
NERDVANA has outlined a perl implementation of your problem under this scheme.