Is the -d method faster or more efficient than the opendir() method? Are there any advantages to either method. I currently use the opendir() in some apps. I really like what tachyon posted, but is it more or less efficient than my current solution?
| [reply] [d/l] [select] |
Any of the -X operators involve a call to stat(). You can use the cached result by doing if -f $_ and ! -l _ ie the '_' char accesses the (last) cached stat result. As for readdir vs glob I would expect them to be similar for speed. glob *is* different from readdir in one important way that can bite you if you don't expect it. With glob you will have the full/partial path you fed it in every result element. Sometimes this is very convenient as it saves adding the path, sometimes of course it is not. If it is convenient I use glob, if I just want the file/dir names without any path I use readdir.
| [reply] [d/l] |
P:\test>perl -MBenchmark=cmpthese -le" cmpthese( -1, {
glob=>q[
@f=@d=();
push @{ -d() ? \@d : \@f }, $_ for glob('*');
],
readdir=>q[
@d=@f=();
opendir D, '.';
push @{ -d() ? \@d : \@f }, $_ while $_ = readdir D;
]
});"
Rate glob readdir
glob 22.9/s -- -48%
readdir 44.4/s 94% --
Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algoritm, algorithm on the code side." - tachyon
| [reply] [d/l] |