> Note that filling @EXPORT is generally frowned upon. Much better to use @EXPORT_OK and allow the script to decide which symbols to import.
I agree, but the road to hell is paved with good intentions. It depends whether modules in question are written as reusable or not. My are not. Intentionally. One advantage of using export is that there can't be mismatch between your intentions and actually exported variables. Which you will discover several months down the road. Been there, done that.
Also for some idiosyncratic reasons I consider this quest for reusability as often misguided obsession, which cost you a lot of man hours with zero return.
Even slight adaptation of module to the task in hand cuts the code lines in half in comparison with using a "universal/reusable" version. Number of errors in your code is generally proportional to the number of codeines. And life is short.
It is something similar with polishing your OO classes instead of doing productive work. Or converting your perfectly valid procedural version into the OO version, because everybody are using OO.