One possibility is instead of overriding the original do_magic(), go ahead and create my_do_magic() and put it in either My::Foo::Bar or within Foo::Bar itself.
My criteria for good software:
Does it work?
Can someone else come in, make a change, and be reasonably certain no bugs were introduced?