With your confirmation that they only contain one _init() subroutine each--although you are calling them as methods--personally, I can see no reason not to simply move the two _init() routines into your My package (with different names), and drop the extra packages.
Well, the main reason is modularity:
- Class My contains methods to deal with a particular kind of data (a kind of trees if that matters) regardless how I feed data to these objects
- My::XML contains, well, code that feeds data coming from a particular source. Although it is true that only _init is used by My, there are other functions/methods that are called by _init (all related with cleaning and parsing the data).
- The same for My::JSON.
For me, it makes a lot of sense to separate code that reads data in a special format to feed the objects from code that manage the objects.