in reply to Planning for Backwards Compatibility

You left out another approach: Keep the default as is but add a 'opt in' method for the new API.

This has happened to me a couple of times with CGI::Minimal.

The first time was when I needed to support 'mixed' GET/POST semantics (processing GET style CGI parameters and POST style CGI parameters in a single POST request). Which is wierd and non-RFC, but required to integrate with some specific code I didn't have control over. Changing the default would likely break code for someone (probably me ;) ), so I added a static method, CGI::Minimal::allow_hybrid_post_get(1);, that let the programmer request the new semantics.

A few days ago someone requested a change to CGI::Minimal's behavior when running under ModPerl2. By default, they ran their server with %ENV hash filling with the CGI environment variables disabled (which give a small performance boost) while CGI::Minimal, by default, forces filling %ENV (which is the case I personally need). Changing the default would definitely break existing code. But I could see the utility of his request (although my benchmarking puts the performance pop only in the single digit percentages).

So I added a 'use' flag (:no_subprocess_env) to request the API behavior he wanted.