Article 12016 of comp.lang.perl:
Path: feenix.metronet.com!news.utdallas.edu!convex!cs.utexas.edu!howland.reston.ans.net!pipex!demon!wiggins.isri.unlv.edu!grover
Newsgroups: comp.lang.perl
From: grover@wiggins.isri.unlv.edu (Kevin Grover)
Resent-from:   Gerry King <GKING@caspe.demon.co.uk>
Resent-date:   Sat, 26 Mar 1994 15:22:38 +0000
Subject: Re: Read/Write dBase files
X-Newsreader: TIN [version 1.1 PL8]
Resent-Date: Fri, 25 Mar 1994 09:38:54 -0800
Resent-From: Kevin Grover <grover@wiggins.isri.unlv.edu>
Date: Fri, 25 Mar 1994 01:38:54 +0000
Message-ID: <9403251742.aa02700@post.demon.co.uk>
Sender: usenet@demon.co.uk
Lines: 76

In article <764547663snx@caspe.demon.co.uk> (in comp.lang.perl) you wrote:
> Has anyone worked out how to read/write dBase files from Perl? ISTR that 
> handling dbase files as associative arrays was in the wishlist. If nobody
> has tackled this I guess I'll have to have a go. I've been using Perl for
> a little while (the Llama book was a big help, great job Randal!) but always
> in text mode. 
> A dbase header has a few longs and unsigneds. How do I read/write these from
> Perl?

> Gerry King
> +------------------------+------------------------------+
> |  CASPE Research        | voice      +44 71 229 8739   |
> |  22 Palace Court       | fax        +44 71 221 9892   |
> |  Bayswater             | internet   caspe.demon.co.uk |
> |  London W2 4HU         |                              |
> +------------------------+------------------------------+

use the read/write system call w/ pack and unpack
also, if you want the thing to work in DOS, you need to use the
binmode function (it places a file descriptor into binary mode -- it
is ignored on non-dos machines).  there is no corrosponding asciimode
(i.e. once binmode has been used, only way to get back is close and
reopen the file)

Included below is a program called "hex", it will dump a file in HEX
(w/ printable ascii).  You can use it as an example

Keep in mind, the binmode is only needed on DOS machines....

--
- kev, grover@isri.unlv.edu


#!/local/perl/bin/perl
# =============================================================================
#  $Id: hex,v 1.1 1993/04/21 17:27:16 grover Exp $
#
#  HEX in perl: dump a file in hexadecimal, and printable characters
#
#  - Kevin Grover, grover@isri.unlv.edu
# =============================================================================

die "Usage: hex infile [infile ...]\n" unless @ARGV;

$spaces = " " x 80;
foreach $t (0..31,127..255) { $char[$t] = "."; }
foreach $t (32..126) { $char[$t] = sprintf ("%c",$t); }

while ($f = shift @ARGV) {
  open (IN, "<$f") || warn "Can't open input $f: $!\n",next;
  binmode IN;
  &process;
  $offset = 0;
  close (IN);
}

sub process {
  $temp = "";
  while (read(IN, $temp, 16)) {
     &outhex;
  }
}

sub outhex {
  printf ("%08X: ", $offset);
  $offset += 16;
  for ($i=0; $i<length($temp); $i++)
    { printf(" %02x",ord(substr($temp,$i,1))); 
      print " " if ($i == 7);
    }
  print substr($spaces, 1, (16-length($temp))*3 +2);
  for ($c=0; $c<length($temp); $c++) { print $char[ord(substr($temp,$c,1))]; }
  print "\n";
}




