http://www.perlmonks.org?node_id=859610


in reply to Re: A looping question
in thread A looping question

First, remove that "no warning" clause, when you develop, warnings are a guide to things that may be wrong, or are wrong. As posted, the program don't compile for a strict violation, you should declare $basedir (and while at it, there's no need to declare Wanted both on the top and bottom of the program.

Second, you check twice on the return value of "find" which goes contrary to File::Find's purpose, which is to loop over, recursively, a file tree and perform a certain action on each file/folder. Your logic should go inside the Wanted sub, rather than on an outer loop.

"Principle of Least Astonishment: Any language that doesn’t occasionally surprise the novice will pay for it by continually surprising the expert..

Replies are listed 'Best First'.
Re^3: A looping question
by Anonymous Monk on Sep 10, 2010 at 09:37 UTC
    Ok , your answer has confused me. I take the point about $basedir which I've now declared and also removed the warning and only declared Wanted once. Is find the wrong thing to use to check for the existence of a file ?

      I see what you mean. File::Find isn't about "finding files", but is a tool for recoursing through a directory tree, and performing an action on some/all of the files/directories.

      To check for the existence of a file/directory you can use the file tests that come with perl itself (http://perldoc.perl.org/functions/-X.html). for example if you have a $path, -e $path will return whether the path exists, -d $path will return true if the path is of a directory, and -f $path will return true if the path is of a file

      "Principle of Least Astonishment: Any language that doesn’t occasionally surprise the novice will pay for it by continually surprising the expert..