CAM-DBF
view release on metacpan or search on metacpan
lib/CAM/DBF.pm view on Meta::CPAN
'a' => '>>',
'a+' => '+>>',
);
sub _init
{
my $pkg = shift;
my $filename = shift;
my $filemode = shift;
my %flags;
if (@_ % 2 == 0)
{
%flags = @_;
}
if (!defined $filemode || $filemode eq q{})
{
$filemode = 'r';
}
if (!$filemode_open_map{$filemode})
{
croak 'Invalid file mode';
}
my @times = localtime;
my $year = $times[5]+1900;
my $month = $times[4]+1;
my $date = $times[3];
my $self = bless {
filename => $filename,
filemode => $filemode,
fh => undef,
fields => [],
columns => [],
valid => 0x03,
year => $year,
month => $month,
date => $date,
nrecords => 0,
nheaderbytes => 0,
nrecordbytes => 0,
packformat => 'C',
flags => \%flags,
}, $pkg;
$self->_open_fh();
return $self;
}
sub _open_fh
{
my $self = shift;
if ($self->{filename} eq q{-})
{
# This might be fragile, since seek won't work
if ($self->{filemode} =~ m/r/xms)
{
$self->{fh} = \*STDIN;
}
else
{
$self->{fh} = \*STDOUT;
}
}
else
{
my $fh;
if (open $fh, $filemode_open_map{$self->{filemode}}, $self->{filename})
{
$self->{fh} = $fh;
}
}
if (!$self->{fh})
{
croak "Cannot open DBF file $self->{filename}: $!";
}
binmode $self->{fh};
return;
}
#----------------
=item $pkg->new($filename)
=item $pkg->new($filename, $mode)
=item $pkg->new($filename, $mode, $key => $value, ...)
Open and read a dBASE file. The optional mode parameter defaults to
C<r> for read-only. If you plan to alter the DBF, open it as C<r+>.
Additional behavior flags can be passed after the file mode.
Available flags are:
=over
=item C<< ignoreHeaderBytes => 0|1 >>
Looks for the 0x0D end-of-header marker instead of trusting the
stated header length. Default 0.
=item C<< allowOffByOne => 0|1 >>
Only matters if C<ignoreHeaderBytes> is on. If the computed header size
differs from the declared header size by one byte, use the
latter. Default 0.
=item C<< verbose => 0|1 >>
Print warning messages about header problems, or stay quiet. Default
0.
=back
( run in 1.099 second using v1.01-cache-2.11-cpan-364913b4093 )