in reply to Re: List and identify directories
in thread List and identify directories

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?


Grygonos

Replies are listed 'Best First'.
Re^3: List and identify directories
by tachyon (Chancellor) on Jun 28, 2004 at 16:53 UTC

    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.

    cheers

    tachyon

      As for readdir vs glob I would expect them to be similar for speed.

      I got caught by that assumption a while ago...but glob is still nicer.

      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