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

How will you compare the contents of directory with the contents of a flat file? Thanks Keshu
  • Comment on Compare the contents of directory with the contents of file

Replies are listed 'Best First'.
Re: Compare the contents of directory with the contents of file
by repson (Chaplain) on Feb 24, 2001 at 06:55 UTC
    I guess you might be storing the list of contents of a directory in a flat file, and want to check if the current contents differ from the stored record.

    In that case I would build a hash of the lines of the file like so:

    %files = map { tr/\015\012//d; ($_,1); } (<FILE>);

    Where FILE is an already open filehandle.
    Then I would loop over the directory like so (where DIR comes from opendir):

    while (defined($_ = readdir(DIR))) { next if /^\.\.?$/; unless (delete $files{$_}) { print "New: $_\n"; } }
    Reporting things that weren't in the file and removing the others from the hash.
    And finally reporting thing from the file that are no longer in the directory:
    for (keys %files) { print "Gone: $_\n"; }
    Of course if you are not asking for that, then your question needs clarification.

    2001-03-04 Edit by Corion : Removed an erroneous <CODE> tag

Re: Compare the contents of directory with the contents of file
by dsb (Chaplain) on Feb 25, 2001 at 00:57 UTC
    Perhaps you could make an effort at this yourself before bringing it here. This is something that you should be able to at least take a stab at. This is not a particularly difficult subject to research yourself. Look for the
    open()
    and
    opendir()
    functions

    Amel - f.k.a. - kel