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 )