Алгоритм решения может быть следующим. Сначала заходим в заданную директорию, открываем поочередно находящиеся в ней директории, удаляем все находящиеся в ней файлы, закрываем директории и удаляем их. После этого удаляем все файлы, находящиеся в заданной директории, закрываем и удаляем ее.

    Отметим, что в начале программы располагается проверка на наличие параметров в командной строке.

    Текст программы:

#! perl -w

# Проверка на наличие параметров
# в командной строке.
print "В командной строке отсутствует имя каталога!\n" unless defined $ARGV[0];
if (defined $ARGV[0]) # Выполняется в случае наличия параметра.
{
  opendir FF, $ARGV[0]; # Открытие удаляемого каталога.
  while ( defined ($name = readdir FF)) # Пока есть каталоги.
  {
   # Использование только подкаталогов.
   if (!($name eq "." or $name eq ".." )) 
   {
     opendir AA, "$ARGV[0]/$name" if -d $name; # Открытие удаляемого каталога.
     unlink  <AA, "$ARGV[0]/$name/*.*">; # Удаление всех файлов из него.
     closedir AA; # Закрытие текущего каталога.
     rmdir "$ARGV[0]/$name"; # Удалить текущий каталог.  
   }
  }
  unlink  <FF, "$ARGV[0]/*.*">; # Удаление всех файлов.
  closedir FF; # Закрытие удаляемого каталога.
  rmdir "$ARGV[0]"; # Удалить текущий каталог.  
}
Текст этой программы можно взять здесь.