I had a question using Perl’s readdir(). I want to gather all the files in a directory that have the same prefix file name I specified. So, for each prefix, I need to use Perl’s readdir() to grep all related files.
Suppose the prefix is “abc”, there are several files with the names “abc_1”, “abc_2”, etc.
However, I noticed that if I put opendir, closedir outside of a loop (loop through a list of file name prefixes), I can only grep the very first prefix from the dir — all the following grepping failed. If I chose to call opendir and closedir each time in the loop, it worked fine but I’m afraid it is not efficient at all.
My question is how can I make it more efficient? It is weird that I can’t call readdir multiple times in a loop.
Thanks a lot in advance!
-Jin
Directory (and file) handles are iterators. Reading from one consumes data, you need to either store that data or reset the position of the iterator. Closing and reopening is the hard way; use
rewinddirinstead.Alternately, use
globto do the reading and filtering in one step.