http://www.perlmonks.org?node_id=370566

Today I used File::Find for the first time. It worked very nicely for what I wanted to do, the only gripe I had about it is that part of the interface uses global variables and gives the warning "don't touch". For example for the 'wanted' subroutine that is passed to 'find', it is not passed any parameters, it is required to use the global variables   $File::Find::dir,$_, and $File::Find::name .
For my quick script that I was using this wasn't a big deal, but I could see if I was using this module a lot I would want to change the interface a little bit, so the 'wanted' routine actually recieved this information through "@_" instead of through global variables. This is a scenario that I have run into many times, where there is a module that has the functionality I want, but an interface that I don't like. How do you usually handle this situation, do you:
1. Live with the interface
2. Create a wrapper class with a different interface
3. Write a whole new class
4. Something else?