=head1 NAME
Tie::FlatFile::Array - Treat a flatfile database as an
array of arrays.
=head1 SYNOPSIS
use Tie::FlatFile::Array;
use Fcntl;
tie @flat, 'Tie::FlatFile::Array', 'data.file',
O_RDWR | O_CREAT, 0644, { packformat => 'A30L' };
@flat = (
[www.yahoo.com => 3601],
[www.google.com => 5214]
);
untie @flat;
=head1 DESCRIPTION
This module allows the programmer to treat a flatfile database as
as array of arrays. For example, let's say you have a
datafile that has fixed-length records like so:
Field-name Type
URL ASCII characters, length 30
Referals Integer, 4 bytes, binary in network order
If you were going to use C to create a record like
this, you'd use a format string of C. Since
C does the packing and unpacking
behind the scenes, you would use that pack
format string in the call to C:
tie @flat, 'Tie::FlatFile::Array', 'data.file',
O_RDWR | O_CREAT, 0644, { packformat => 'A30N' }
or die("Tie failure: $!");
To insert an item into the data file, you would assign an
array reference to one of the array's elements like so:
$flat[0] = [ 'www.yahoo.com', 3601 ];
Behind the scenes, code something like this will be
executed:
seek($fh, 0, SEEK_SET);
print $fh pack('A30N', @{['www.yahoo.com', 3601]});
If you were to assign something to the second element in the
tied array:
$flat[1] = [ 'www.google.com', 5814 ];
Something like this would happen:
seek($fh, 34, SEEK_SET);
print $fh pack('A30N', @{['www.google.com', 5814]});
When you insert data into the file, you must use an array
reference, and when you extract data from the file you
receive an array reference. This
code should display the file's contents:
use Tie::FlatFile::Array;
use Fcntl;
tie @flat, 'Tie::FlatFile::Array', 'data.file',
O_RDWR | O_CREAT, 0644, { packformat => 'A30N' };
foreach my $index (0..$#flat) {
my $ref = $flat[$index];
print "@{$ref}\n";
}
untie @flat;
Note that fetching beyond the bounds of the array results
in C.
=head1 SEE ALSO
See perltie, "perldoc -f pack" and possibly Tie::Array and
Carp.
=head1 AUTHOR
Copywright 2007-2009 Mumia Wotse
Mumia Wotse
This program is under the General Public License (GPL).
=cut
vim: wm=20 ts=8