Deleting a File
Problem
You want to delete a file. Perl’s delete
function isn’t what you want.
Solution
Use Perl’s standard unlink
function:
unlink($FILENAME) or die "Can't delete $FILENAME: $!\n"; unlink(@FILENAMES) == @FILENAMES or die "Couldn't unlink all of @FILENAMES: $!\n";
Discussion
The unlink
function takes its name from the Unix
system call. Perl’s unlink
takes a list of
filenames and returns the number of filenames successfully deleted.
This return value can then be tested with ||
or
or
:
unlink($file) or die "Can't unlink $file: $!";
unlink
doesn’t report which filenames it
couldn’t delete, only how many it did delete. Here’s one
way to test for successful deletion of many files and to report the
number deleted:
unless (($count = unlink(@filelist)) == @filelist) { warn "could only delete $count of " . (@filelist) . " files"; }
A foreach
over @filelist
would
permit individual error messages.
Under Unix, deleting a file from a directory requires write access to the directory,[15] not to the file, because it’s the directory you’re changing. Under some circumstances, you could remove a file you couldn’t write to or write to a file you couldn’t remove.
If you delete a file that some process still has open, the operating
system removes the directory entry but doesn’t free up data
blocks until all processes have closed the file. This is how the
new_tmpfile
function in IO::File (see Section 7.5) works.
See Also
The unlink
function in perlfunc
(1) and in Chapter 3 of Programming Perl ...
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.