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

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

Replies are listed 'Best First'.
Re^4: List and identify directories
by BrowserUk (Patriarch) on Jun 29, 2004 at 03:34 UTC
    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