package Padre::Task::File; =pod =head1 NAME Padre::Task::File - File operations in the background =head1 SYNOPSIS # Recursively delete Padre::Task::File->new( remove => 'C:\foo\bar\baz', )->schedule; =head1 DESCRIPTION The L CPAN module is a specialised package for deleting files or recursively deleting directories. As well as providing the basic support for recursive deletion, it adds several other important features such as removing readonly limits on the fly, taking ownership of files if permitted, and moving the current working directory out of the deletion path so that directory cursors won't block the deletion (a particular problem on Windows). The task takes the name of a single file or directory to delete (for now), and proceeds to attempt a recursive deletion of the file or directory via the L C method. In the future, this module will also support more types of file operations and support the execution of a list of operations. =head1 METHODS =cut use 5.008; use strict; use warnings; use File::Spec (); use Padre::Task (); our $VERSION = '0.96'; our @ISA = 'Padre::Task'; ###################################################################### # Constructor =pod =head2 new my $task = Padre::Task::File->new( remove => '/foo/bar/baz', ); Creates a new deletion task. Takes a single parameter C which B be an absolute path to the file to delete (as the "current directory" may change between the time the removal task is created and when it is executed). =cut sub new { my $self = shift->SUPER::new(@_); # Check the path to remove unless ( defined $self->remove ) { die "Missing or invalid path"; } unless ( File::Spec->file_name_is_absolute( $self->remove ) ) { die "File path is not absolute"; } return $self; } =pod =head2 remove The C accessor returns the absolute path of the file or directory the task will try to delete (or tried to delete in the case of completed tasks). =cut sub remove { $_[0]->{remove}; } ###################################################################### # Padre::Task Methods sub run { my $self = shift; # Do not check for the path existing at prepare time as this involves # a blocking stat call. Better to just pass it through and do the file # existance check and any resulting shortcuts in the background. my $path = $self->remove; unless ( -e $path ) { return 1; } # Hand off to the specialist module require File::Remove; $self->{removed} = [ File::Remove::remove( \1, $path ) ]; return 1; } 1; =pod =head1 SEE ALSO L, L, L =head1 COPYRIGHT Copyright 2008-2012 The Padre development team as listed in Padre.pm. This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself. The full text of the license can be found in the LICENSE file included with this module. =cut