Your constructor, new(), should return a blessed object. Usually, I define a separate init() method and, if I find that the constructor has been called with parameters, I first create the blessed object and then separately invoke that method to do the rest.
I understand this on a superficial level, but cannot grok the idea that you're putting forward for an init. Extending the blessed object is where I think my knowledge is faltering, and I'm unclear as to how to remedy that.
Any Perl object is, almost always, a hash. It can therefore “hold on to” anything that it wants. As for the YAML question, what will make the most sense for the user of this module? If the YAML object is something that the client program will have already, and will otherwise be using for other purposes, then it makes sense to pass it in and keep it.
This is exactly the use case I have currently, which is why I want to do what I have described.