http://qs321.pair.com?node_id=619565

amitsandilya has asked for the wisdom of the Perl Monks concerning the following question:

if (-d $entry and $fn !~ m/ˆ\.\.?$/) { push @matches, $this->find($entry); }
  • Comment on can anyone explain this.. I am a beginner

Replies are listed 'Best First'.
Re: can anyone explain this.. I am a beginner
by citromatik (Curate) on Jun 06, 2007 at 10:15 UTC

    Can be read as:

    If, what is in the variable $entry is a directory and what is in variable $fn doesn't match exactly one or two dots, then push in the array @matches, the result of applying the method "find" on the object $this taking $entry as its unique argument

    If this makes sense to you...

    citromatik

Re: can anyone explain this.. I am a beginner
by ikegami (Patriarch) on Jun 06, 2007 at 13:25 UTC

    Used in a loop iterating over the contents of a directory,
    $fn should contain the name of a file, and
    $entry should contain a qualified path (but not necessarily an absolute path) to that file.

    -d checks if the file is a directory.
    Anything other than a directory will be ignored.

    $fn !~ m/ˆ\.\.?$/ checks if the file is named something other than ".", "..", ".\n" or "..\n".
    On Windows and unix systems, . and .. are special directories which link to the current and the parent directory respectively.

    (Checking for ".\n" and "..\n" is a bug. Changing $ to \z would fix this.)

    Therefore, of the files over which the loop containing that line iterates, the body of the if is called only for those that are subdirectories.

    The body of the if calls find on each subdirectory and accumulates the results in @matches.

Re: can anyone explain this.. I am a beginner
by guinex (Sexton) on Jun 06, 2007 at 12:32 UTC
    I'm guessing that this bit of code is contained in a loop of some kind that updates the value of $entry. The idea is to call the method find on every directory except "." and "..". The result of each method call is saved in the @matches array.

    guinex