How should I pass settings to a module in Perl that also exports symbols?
I would stay away from changing the normal workings of import(). I've never seen a module mix exporting and configuration at the same time (maybe you have, though), so leave those out (options 1 and 3). I think you are right in thinking that option 2 isn't too pretty. That leaves us with none of those options.

I think instead of this you should just allow calling version_ok and version_all_ok with the options hash.

version_ok({ is_string =&gt; 1, has_version =&gt; 0 });


Clear and standard, nothing odd going on.  From the way it seems like the module is going to be used this isn't a burden on the user (since there will normally only be one call to this in the entire test suite).