##READ THE TEXT FILE AND RENAME THE DIRECTORIES #### my $dir_map = read_map($mapfile); my $top_dir=$output_dir; rename_dirs( $top_dir, $dir_map ); sub rename_dirs { my ( $top_dir, $dir_map ) = @_; opendir (my $dh, $top_dir) or die "Can't open $top_dir: $!"; my $save_dir = getcwd(); chdir $top_dir; while (my $dir = readdir $dh) { #print $dir,"\n"; next if ($dir eq '.') or ($dir eq '..'); if ( exists $dir_map->{$dir} ) { my $new_name = $dir_map->{$dir}; File::Copy::move( $dir, $new_name ) or die "Could not rename '$dir' as '$new_name': $!"; $dir = $new_name; } rename_dirs( $dir, $dir_map ) if -d $dir; } chdir $save_dir; } ##SUB ROUTINE TO READ THE TEXT FILE FROM COMMAND LINE ARGUMENTS## sub read_map { my ( $fn ) = @_; my %dir_map; open( my $fh, '<', $fn ) or die "Could not open file '$fn': $!"; while( my $line = <$fh> ) { chomp $line; my @fields = split /:/, $line; if ( @fields == 3 ) { $dir_map{$fields[2]} = $fields[1]; } } close $fh; return \%dir_map; }