in reply to File::Find in a thread safe fashion

You'll get the same problem with using any code that relies upon global state if you try to use it in threads. You'll likely get a similar problem if you try to use File::Find in an event driven environment like POE.

There was a recent thread about what is wrong with File::Find. For me, it's this dependancy upon global state that is it's biggest failing. It's not just the Perlish global vars that form the interface that is a problem--ithreads heroically attempts and mostly succeeds in defending you against that--it's also the way it changes the state of the process by changing the process' current working directory. I'm not sure of the case under pthreads, but on Win32, the CWD is a process-wide state at the OS level, so running File::Find in threads whilst it has this behaviour will never succeed.

You should be able to use opendir/readdir/closedir successfully in a threaded environment.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
  • Comment on Re: File::Find in a thread safe fashion

Replies are listed 'Best First'.
Re^2: File::Find in a thread safe fashion
by Preceptor (Deacon) on Jul 28, 2006 at 12:18 UTC
    I think I may just be stuffed.

    Although that said, I believe File::Find _does_ have a 'don't chdir' option to it. I shall investigate and experiment.

      Ah, yes, if I change this code so I have a 'dont_chdir' in there, it seems to be running smoothly. It'll take a while to verify, but this _looks_ a lot more promising.