Listing 2. Per Script to Traverse Directories

#!/usr/bin/perl
if((@ARGV != 1) && (@ARGV != 0)) {
print ("\nUsage:  create_vocals [-clean]\n");
print ("\nMP3_ROOT must be set before running" .
       " the script\n\n");
exit(1);
}
if((@ARGV == 1) && !($ARGV[0] eq '-clean')) {
print ("\nIf you supply one argument it must be" .
       " '-clean'\n");
exit(1);
}
$mp3root = $ENV{'MP3_ROOT'};
if(!(-d $mp3root)){
  print ("\nMP3_ROOT not present!!\n");
  exit(1);
}

print ("MP3_ROOT is $mp3root\n");
$vocals = $mp3root . '/.vocals';
if(-d $vocals){
  if(@ARGV == 1){
    print ("Cleaning up the .vocals directory\n");
    chdir( $vocals);
    system ("rm -f *");
    exit(0);
  } else {
print ("\nThe .vocals directory is already in" .
       " $mp3root\n");
print "We will update the files as appropriate\n";
}
} else {
print ("\n.vocals is not there, so we will " .
       "create it.\n");
  mkdir( $vocals, 0777);
}
&recursively_list_files($mp3root);

exit(0);
sub recursively_list_files {
local($dir) = @_;
local($prevdir);
local($directory);
local($file);
local(@directories);
local(@files);
opendir (DIR, $dir) || die (
 "\nCannot open a directory in the tree\n\n");
$prevdir = $dir;
chdir $dir || die (
 "\nCannot find a directory in the tree\n\n");
@directories = grep(!/^\./ , grep (-d ,<\n>
                  readdir(DIR)));
rewinddir(DIR);
closedir(DIR);
foreach $directory (@directories) {
  $file_to_open = $vocals . "/" . $directory .
    ".txt";
  if(!(-e $file_to_open)){
    open(OUR_FILE, ">$file_to_open");
    $our_changed_directory = $directory;
    $our_changed_directory =~ s/[^a-zA-Z]/ /g;
    print OUR_FILE "$our_changed_directory";
    close( OUR_FILE);
  }
  $output_file = $vocals . "/" . $directory;
  if(!(-e $output_file)){
    system("/usr/lib/festival/examples/text2wave
      -o $output_file -otype ulaw $file_to_open");
  }
  &recursively_list_files($prevdir . "/" .
    $directory);
  }
}