In general, I think it is good practice for AUTOLOAD to instantiate the sub (or method), then goto() it, so that next time it gets called directly instead of going through AUTOLOAD.
If the instantiation is 'clean', there should be no difference between the first call and subsequent ones.
That should offer the "least suprise" to the caller.