1. Perl
  2. File operation
  3. here

Delete directories with hierarchy at once

Use the rmtree of File::Path module to delete directories with hierarchies all at once. The return value of rmtree is the number of files that could be deleted.

use File::Path 'rmtree';
rmtree $dir;

Example

This is an example to delete directories with a hierarchy at once.

use strict;
use warnings;
use File::Path 'rmtree';

# Delete the directory
# Preparation (creating a directory)
my $dir1 = "dir_20080527_ $$";
my $dir2 = "$dir1/dir2";
mkdir $dir1
  or die "Unable to create $dir1.:$!";
mkdir $dir2
  or die "Unable to create $dir2.:$!";
print "Preparation: $dir1 and $dir2 have been created.\n\n";
print "1: Delete hierarchical directories at once.\n";

{
  # To catch the warning, use the __WARN__ signal
  # There is no choice but to use a signal handler to capture.
  # (For old rmtree implementations)
  # The content of the warning is stored in the first argument.
  local $SIG{__ WARN__} = sub {
    my $msg = shift;
    die "$msg";
  };

  if (-d $dir1) {
    # If warn is called in the rmtree function,
    # Move to the above sub {} and exit with die.
    rmtree($dir1);
                   
    print "$dir1 has been deleted.\n";
  }
}

(Reference) local - Temporarily save and restore a package variable

Related Informatrion