++ed by:

8 PAUSE users
5 non-PAUSE users.

Daniel Muey


File::Copy::Recursive - Perl extension for recursively copying files and directories


  use File::Copy::Recursive qw(fcopy rcopy dircopy);

  fcopy($orig,$new[,$buf]) or die $!;
  rcopy($orig,$new[,$buf]) or die $!;
  dircopy($orig,$new[,$buf]) or die $!;


This module copies directories recursively (or single files, well... singley) to an optional depth and attempts to preserve each file or directory's mode.


None by default. But you can export all the functions as in the example above.


This function uses File::Copy's copy() function to copy a file but not a directory. One difference to File::Copy::copy() is that fcopy attempts to preserve the mode (see Preserving Mode below) The optional $buf in the synopsis if the same as File::Copy::copy()'s 3rd argument returns the same as File::Copy::copy() in scalar context and 1,0,0 in list context to accomidate rcopy()'s list context on regular files. (See below for more info)


This function recursively traverses the $orig directory's structure and recursively copies it to the $new directory. $new is created if necessary. It attempts to preserve the mode (see Preserving Mode below) and by default it copies all the way down into the directory, (see Managing Depth) below. If a directory is not specified it croaks just like fcopy croaks if its not a file that is specified.

returns true or false, for true in scalar context it returns the number of files and directories copied, In list context it returns the number of files and directories, number of directories only, depth level traversed.

  my $num_of_files_and_dirs = dircopy($orig,$new);
  my($num_of_files_and_dirs,$num_of_dirs,$depth_traversed) = dricopy($orig,$new);


This function will allow you to specify a file *or* directory. It calls fcopy() if its a file and dircopy() if its a directory. If you call rcopy() (or fcopy() for that matter) on a file in list context, the values will be 1,0,0 since no directories and no depth are used. This is important becasue if its a directory in list context and there is only the initial directory the return value is 1,1,1.

Preserving Mode

By default a quiet attempt is made to change the new file or directory to the mode of the old one. To turn this behavior off set $File::Copy::Recursive::KeepMode to false;

Managing Depth

You can set the maximum depth a directory structure is recursed by setting: $File::Copy::Recursive::MaxDepth to a whole number greater than 0.


 L<File::Copy> L<File::Spec>


Daniel Muey, http://drmuey.com/cpan_contact.pl


Copyright 2004 by Daniel Muey

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.