You've already received good answers. But as an aside, to help clarify your code: hippo's refactoring to foreach my $subdir (@files) implied my suggestion, but I will make it more explicit (and go a little farther): please don't call a list of subdirectories @files, nor an element from that list $file. You'll just confuse anyone else trying to read or sustain your code, and probably yourself in the future, by saying you are changing directory into a file. Use foreach my $subdir ( @subdirs ), or $name ... @names, or $vehicle, or $machine, or $thingamagoob. It's helpful to give the variables names meaningful to the context -- but please, please, whatever you do, don't give it a name that's misleading, confusing, or wrong for the context. Please. :-)