If you use it more than once, it whines and complains ... I used to have it running warn() for the second function.
Oh, I see. If you use the sub more than once, you get a custom complaint, which is defined by the second coderef.
That seems a bit odd to me. I would probably make it only execute the first one once, and then have a standard warning thereafter. If it was necessary to have a custom message, I'd pass it in as a string argument, not another coderef. But perhaps your approach makes more sense for what you're doing.
Or maybe you're just doing this to have fun with closures, in which case I'm putting entirely too much thought into the whole thing. :-)