in reply to Re: Recursive File Copy question
in thread Recursive File Copy question

On windows, I'd use xcopy /exclude:fileOfThingsToExclude src dst

Yes, but when I do this from perl, my program would not be portable to other platforms anymore.

-- 
Ronald Fischer <ynnor@mm.st>

Replies are listed 'Best First'.
Re^3: Recursive File Copy question
by BrowserUk (Patriarch) on Jul 22, 2008 at 15:05 UTC

    There are usually so many special cases to be dealt with when dealing with filesystems, that it doesn't make sense to try and use the same code on Win32 and *nix-like systems. So don't try:

    if( $^O eq 'mswin32' ) { ## use xcopy } elsif( $^O =~ m[(linux|unix|whatever)] ) { ## use something else } else { ## use another something else ## or throw up your hands in disgust. }

    What do I mean by special cases?

    1. *nix filesystems have:
      • a unified filespace;
      • soft & hard links;
      • chmod, chown, chgrp;
      • case-sensitivity;
      • Unicode filenames?;
      • other;
    2. Win32 filesystems have:
      • drives;
      • UNCs;
      • shares;
      • substs;
      • junctions;
      • streams;
      • attributes;
      • ACLs;
      • case-transparency;
      • long & short filenames;
      • Wide-character filenames;
      • other;
    3. Other non-disish/non-*nixish filesystems?

      ...

    Mixing all the special cases together and trying to deal with them in-line, is an exercise in frustration & complexity and is doomed to years of bugs and failures.

    Make a high-level, up-front decision as to which system you are on and then load a different module or use a different subroutine and keep the logic simple(r).


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.