This can’t be emphasized enough. A couple of years ago I was wrestling with a really old application which “inexplicably” did not run on one of several different machines. It turned out to be a problem such as this: there was a common subroutine-name, more than one potential source of it, and a very slight difference in the file setup on that one machine ... a file was there but not being picked up, long story. But the bottom line was that the intended (correct ...) behavior of that code as-written was in effect contextually determined, with an ambiguity in play that was hiding the root problem. Learning from this, I now try to be as explicit as possible in every place where such ambiguities might occur: using qw() import-lists with large “kitchen sink” utility packages, and sometimes empty lists there with explicit fully-qualified (i.e. with package name expressly specified) references to the exact routine that I need. These problems, when I have seen them, come from software that was originally written for older Perls.