AnyData2
view release on metacpan or search on metacpan
lib/AnyData2/Storage/File.pm view on Meta::CPAN
package AnyData2::Storage::File;
use 5.008001;
use strict;
use warnings FATAL => 'all';
use base qw(AnyData2::Storage);
use Carp qw/croak/;
use Fcntl qw(:seek);
use IO::File ();
use Module::Runtime qw(require_module);
=head1 NAME
AnyData2::Storage::File - AnyData2 file storage
=cut
our $VERSION = '0.002';
=head1 DESCRIPTION
Base class for L<AnyData2::Storage::File::Linewise> and L<AnyData2::Storage::File::Blockwise> to handle common stuff
=head1 METHODS
=head2 new
my $as2 = AnyData2::Storage::File->new(
filename => "data.ext",
filemode => "r",
fileperms => 0644
);
my $as2 = AnyData2::Storage::File->new(
filename => "data.ext",
filemode => "<:raw"
);
constructs a storage.
=cut
sub new
{
my ( $class, %options ) = @_;
my $self = $class->SUPER::new();
defined $options{filemode} or $options{filemode} = "r";
my @openparms = qw(filename filemode);
unless ( $options{filemode} =~ m/^[<>]/ )
{
defined $options{fileperms} or $options{fileperms} = 0644;
push @openparms, qw(fileperms);
}
$self->{fh} = IO::File->new( @options{@openparms} ) or die "Can't open $options{filename}: $!";
@$self{qw(filename filemode fileperms)} = @options{qw(filename filemode fileperms)};
$self;
}
=head2 seek
$stor->seek(pos, whence)
Moves the storage pointer to given position. See L<IO::Seekable> for details.
=cut
sub seek
{
my ( $self, $pos, $whence ) = @_;
$self->{fh}->seek( $pos, $whence ) or croak "Can't seek to $pos from $whence for $self->{filename}: $!";
"0E0";
}
=head2 truncate
$stor->truncate
Truncates the underlying storage backend at it's current position.
=cut
sub truncate
{
my $self = shift;
$self->{fh}->truncate( $self->{fh}->tell() ) or die "Can't truncate $self->{filename}: $!";
}
=head2 drop
$stor->drop
Drops the underlying storage (e.g. delete file)
=cut
sub drop
{
my $self = shift;
$self->{fh} and $self->{fh}->close;
unlink $self->{filename};
}
=head2 meta
Experimental
( run in 0.622 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )