File::Append::TempFile - Perl extension for appending data to
files
use File::Append::TempFile;
$f = new File::Append::TempFile();
$f->begin_work('/etc/hosts') or die "Appending: ".$f->err();
$f->add_line("127.0.0.2 localhvost\n");
$f->commit();
$f->begin_work('/etc/hosts') or die "Appending: ".$f->err();
$f->add_line("...\n");
$f->rollback();
The "File::Append::TempFile"
module provides an OOP interface to appending data to files using a
temporary file, in order to ensure the atomicity of the updates.
An append session is initiated by invoking the
begin_work() method and passing it the name of the
file. At this point, a temporary file is created in the same directory as
the original file and the original's contents is copied to the temporary.
More data is added to the temporary file using the
add_line() method. When done appending, the
commit() method will atomically move the temporary
file over the original. If something goes wrong, the
rollback() method will remove the temporary file
without affecting the original in any way.
The "File::Append::TempFile"
class defines the following methods:
- new ()
- Create a new "File::Append::TempFile"
object. No file processing is done at this point.
- err ( [MESSAGE] )
- Set or obtain an error message describing the last error that occurred
during the processing of the current
"File::Append::TempFile" object.
- diag ([FLAG])
- Set or obtain the diagnostic output flag. If it is set, the methods will
display diagnostic information on the standard error stream.
- begin_work
(FILENAME)
- Creates a temporary file in the same directory as the specified one and
copies the original's contents over to the new file. Further data may be
added using the add_line() method and then either
stored as the original with the commit() method,
or discarded with the rollback() method.
- add_line
(DATA)
- Append data to the temporary file. This does not affect the original in
any way until commit() is invoked.
- commit ()
- Replace the original file with the temporary copy, to which data may have
been added using add_line().
NOTE: This method uninitializes the
"File::Append::TempFile" object, that
is, removes any association between it and the original file and
even file name! The next method invoked on this
"File::Append::TempFile" object should
be begin_work().
- rollback ()
- Discard all the changes made to the temporary copy and remove it. This
does not affect the original file in any way.
NOTE: This method uninitializes the
"File::Append::TempFile" object, that
is, removes any association between it and the original file and
even file name! The next method invoked on this
"File::Append::TempFile" object should
be begin_work().
There are also several methods used internally by the
"File::Append::TempFile" routines:
- debug (MESSAGE)
- Display a diagnostic message to the standard error stream if the output of
diagnostic messages has been enabled.
- do_copy (ORIG
TEMP)
- Actually perform the copying of the original file data into the temporary
file at begin_work() time. This allows derived
classes to modify the file structure if needed.
The two parameters are the file handles for the original and
the temporary file.
The "File::Append::TempFile"
website:
http://devel.ringlet.net/sysutils/file-append-tempfile/
- •
- Note that the original file may have changed between
begin_work() and commit()
- those changes will be lost!
Peter Pentchev, <roam@ringlet.net>
Copyright (C) 2006, 2015 Peter Pentchev.
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself, either Perl version 5.8.7 or,
at your option, any later version of Perl 5 you may have available.