sub extractTarFile { my ($strftime, $submissionID, $cur_submit_dir, $tarLocation, $old_cwd, $tar, $RC_extract); my ($user_Name, $tmpFilePosition, $user_File_Filename) = @_; # just to save some typing $strftime = POSIX::strftime("%Y-%m-%d-%H-%M-%S", localtime); # note that this ID is not unique $submissionID = "$strftime-$user_Name"; $cur_submit_dir = "$submittedFiles/$submissionID"; $tarLocation = "$cur_submit_dir/$user_File_Filename"; # do you really need to create a world writable directory? mkdir($cur_submit_dir, 0755) or die "Cannot make directory: $!"; copy("$tmpFilePosition", "$tarLocation") or die "copy failed: $!"; # store our current working directory $old_cwd = Cwd::cwd; # change to submitted files current dir Cwd::chdir($cur_submit_dir); $tar = Archive::Tar->new(); $RC_extract = $tar->extract_archive($tarLocation); # restore previous working dir Cwd::chdir $old_cwd; return $RC_extract, $tar->error(); }