O'Reilly logo

Perl Cookbook by Nathan Torkington, Tom Christiansen

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required