in reply to Delete file from sub call within another sub

Not quite sure what this script is supposed to be doing, but one “little warning bell” does go-off here, which might be helpful.

As a general rule, don’t try to modify the structure of a filesystem while you are scanning it.   Instead, assemble an in-memory list of the files that you intend to process.   After the scan is finished, walk through the list.

Microsoft Windows, in particular, has serious problems with this ... and it always has.   (Doesn’t matter whether you are using Perl or not.)

Replies are listed 'Best First'.
Re^2: Delete file from sub call within another sub
by begood321 (Novice) on Nov 29, 2010 at 19:45 UTC
    Thanks Sudial for your advice. Guys This strange how my code flow is going shown for code and error below which works different when code from sub threeYrExpiration is in sub file_handler directly. My code actually deletes the file then goes to beginning of sub then file cannot be found because it was already deleted. Can't figure out why this is happening. Logic seems to be correct.
    sub threeYrExpiration($) { my $abs_filename = $_[0]; $logger->debug("abs_filename: $abs_filename"); # delete expired file my $unlinkStatus = unlink("$abs_filename"); $logger->debug("unlinkStatus: $unlinkStatus"); if ($unlinkStatus == 1) { $unlinkCountTotal++; $abs_filename =~ s#.*WORKAREA\/[^\/]*##; push (@deleted_files, $abs_filename); $task->AddFile("$abs_filename", "Deleted by content expiration + report"); $logger->debug("File to be deleted added to job: $abs_filename +"); #deleted files updateCriterionReports($criteria[1],$abs_filename,$meta_exp_da +te); $logger->debug("unlinkStatus: $unlinkStatus"); } else { $logger->debug("unlinkStatus: $unlinkStatus"); # shows error description, reason for failure $logger->warn("Failed to delete '$abs_filename': <$!>"); # $logger->debug("File to be deleted \"$abs_filename\" failed. +Received $unlinkStatus instead of 1."); $task->CallBack(1, "Error Deleting expired file"); exit(1); } }

    Mon Nov 29 14:35:13 2010 : INFO : expiration_report.ipl : File to be deleted added to job: /committees/comm_wkgrps/inactive/cold_snap_tf/europepass.pdf

    Mon Nov 29 14:35:13 2010 : DEBUG : expiration_report.ipl : abs_filename: /iwmnt/default/main/internet/WORKAREA/home/committees/comm_wkgrps/inactive/cold_snap_tf/europepass.pdf

    Mon Nov 29 14:35:13 2010 : DEBUG : expiration_report.ipl : unlinkStatus: 0

    Mon Nov 29 14:35:13 2010 : DEBUG : expiration_report.ipl : unlinkStatus: 0

    Mon Nov 29 14:35:13 2010 : WARN : expiration_report.ipl : Failed to delete '/iwmnt/default/main/internet/WORKAREA/home/committees/comm_wkgrps/inactive/cold_snap_tf/europepass.pdf': <No such file or directory>