It looks like maybe a better way to do this is to instead hook into BUILDARGS as this is executed before the object is created and allows for argument modification. I could explicitly set the value of x passed into the BUILD method and set an empty build method for Foo::Bar.