Win32 counterpart of change #19065
[p5sagit/p5-mst-13.2.git] / ext / DB_File / DB_File.pm
index df189eb..2e5d85e 100644 (file)
@@ -1,8 +1,8 @@
 # DB_File.pm -- Perl 5 interface to Berkeley DB 
 #
 # written by Paul Marquess (Paul.Marquess@btinternet.com)
-# last modified 1st March 2002
-# version 1.804
+# last modified 22nd October 2002
+# version 1.806
 #
 #     Copyright (c) 1995-2002 Paul Marquess. All rights reserved.
 #     This program is free software; you can redistribute it and/or
@@ -32,8 +32,13 @@ sub TIEHASH
 {
     my $pkg = shift ;
 
-    bless { VALID => { map {$_, 1} 
-                      qw( bsize ffactor nelem cachesize hash lorder)
+    bless { VALID => { 
+                       bsize     => 1,
+                       ffactor   => 1,
+                       nelem     => 1,
+                       cachesize => 1,
+                       hash      => 2,
+                       lorder    => 1,
                     }, 
            GOT   => {}
           }, $pkg ;
@@ -58,8 +63,12 @@ sub STORE
     my $key   = shift ;
     my $value = shift ;
 
-    if ( exists $self->{VALID}{$key} )
+    my $type = $self->{VALID}{$key};
+
+    if ( $type )
     {
+       croak "Key '$key' not associated with a code reference" 
+           if $type == 2 && !ref $value && ref $value ne 'CODE';
         $self->{GOT}{$key} = $value ;
         return ;
     }
@@ -132,9 +141,15 @@ sub TIEHASH
 {
     my $pkg = shift ;
 
-    bless { VALID => { map {$_, 1} 
-                      qw( flags cachesize maxkeypage minkeypage psize 
-                          compare prefix lorder )
+    bless { VALID => { 
+                       flags      => 1,
+                       cachesize  => 1,
+                       maxkeypage => 1,
+                       minkeypage => 1,
+                       psize      => 1,
+                       compare    => 2,
+                       prefix     => 2,
+                       lorder     => 1,
                     },
            GOT   => {},
           }, $pkg ;
@@ -150,7 +165,7 @@ our ($db_version, $use_XSLoader, $splice_end_array);
 use Carp;
 
 
-$VERSION = "1.804" ;
+$VERSION = "1.806" ;
 
 {
     local $SIG{__WARN__} = sub {$splice_end_array = "@_";};
@@ -248,6 +263,9 @@ sub tie_hash_or_array
     $arg[4] = tied %{ $arg[4] } 
        if @arg >= 5 && ref $arg[4] && $arg[4] =~ /=HASH/ && tied %{ $arg[4] } ;
 
+    $arg[2] = O_CREAT()|O_RDWR() if @arg >=3 && ! defined $arg[2];
+    $arg[3] = 0666               if @arg >=4 && ! defined $arg[3];
+
     # make recno in Berkeley DB version 2 work like recno in version 1.
     if ($db_version > 1 and defined $arg[4] and $arg[4] =~ /RECNO/ and 
        $arg[1] and ! -e $arg[1]) {
@@ -1344,7 +1362,7 @@ still have bval default to C<"\n"> for variable length records, and
 space for fixed length records.
 
 Also note that the bval option only allows you to specify a single byte
-as a delimeter.
+as a delimiter.
 
 =head2 A Simple Example
 
@@ -1436,7 +1454,7 @@ Returns the number of elements in the array.
 
 =item B<$X-E<gt>splice(offset, length, elements);>
 
-Returns a splice of the the array.
+Returns a splice of the array.
 
 =back