GLOB_ERROR ... Of course I read the perldoc and I tried to use GLOB_ERROR. Unfortunately it is not set to a value other than zero when the globbing produced no result. When I introduce a print Dumper(GLOB_ERROR) after each call to bsd_glob it shows '0' in every case.

$! is not reset ... Right, it would be quite counterintuitive if it were reset. That was a stupid assumption of mine. But then, why is it reset with $pat4 in the above example??

As to chromatics question: Nah, I may be stupid but it's not that bad ;-) This is not real world code it's just me trying to boil the problem down to some small example. You are right, that I should have swapped the lines dumping the list and dumping $!

I am still trying to get this working. Any more pointers?

Following an old rule o' thumb: there must be something very dumb in my thinking or in my code, taking into account the amount of time I have already spent with this problem ;-)