X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FDB_File%2FDB_File.pm;h=df189eb1cda22dd82a25ba91f22b462cce1cb79a;hb=477de5e4362502d757a3f3c25b88e07dc5064aeb;hp=a76927b9854a7317e9cef56897423270113ee3d7;hpb=0d735f06e0f813bbe2fe9867ba364137ed054447;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/DB_File/DB_File.pm b/ext/DB_File/DB_File.pm index a76927b..df189eb 100644 --- a/ext/DB_File/DB_File.pm +++ b/ext/DB_File/DB_File.pm @@ -1,10 +1,10 @@ # DB_File.pm -- Perl 5 interface to Berkeley DB # # written by Paul Marquess (Paul.Marquess@btinternet.com) -# last modified 22nc Oct 2001 -# version 1.79 +# last modified 1st March 2002 +# version 1.804 # -# Copyright (c) 1995-2001 Paul Marquess. All rights reserved. +# Copyright (c) 1995-2002 Paul Marquess. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. @@ -145,13 +145,19 @@ package DB_File ; use warnings; use strict; -use vars qw($VERSION @ISA @EXPORT $AUTOLOAD $DB_BTREE $DB_HASH $DB_RECNO - $db_version $use_XSLoader - ) ; +our ($VERSION, @ISA, @EXPORT, $AUTOLOAD, $DB_BTREE, $DB_HASH, $DB_RECNO); +our ($db_version, $use_XSLoader, $splice_end_array); use Carp; -$VERSION = "1.79" ; +$VERSION = "1.804" ; + +{ + local $SIG{__WARN__} = sub {$splice_end_array = "@_";}; + my @a =(1); splice(@a, 3); + $splice_end_array = + ($splice_end_array =~ /^splice\(\) offset past end of array at /); +} #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE; $DB_BTREE = new DB_File::BTREEINFO ; @@ -210,22 +216,12 @@ push @ISA, qw(Tie::Hash Exporter); sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; - my $val = constant($constname, @_ ? $_[0] : 0); - if ($! != 0) { - if ($! =~ /Invalid/ || $!{EINVAL}) { - $AutoLoader::AUTOLOAD = $AUTOLOAD; - goto &AutoLoader::AUTOLOAD; - } - else { - my($pack,$file,$line) = caller; - croak "Your vendor has not defined DB macro $constname, used at $file line $line. -"; - } - } + my ($error, $val) = constant($constname); + Carp::croak $error if $error; no strict 'refs'; *{$AUTOLOAD} = sub { $val }; goto &{$AUTOLOAD}; -} +} eval { @@ -314,7 +310,7 @@ sub SPLICE my $self = shift; my $offset = shift; if (not defined $offset) { - carp 'Use of uninitialized value in splice'; + warnings::warnif('uninitialized', 'Use of uninitialized value in splice'); $offset = 0; } @@ -339,15 +335,17 @@ sub SPLICE $offset = $new_offset; } - if ($offset > $size) { - $offset = $size; - } - if (not defined $length) { - carp 'Use of uninitialized value in splice'; + warnings::warnif('uninitialized', 'Use of uninitialized value in splice'); $length = 0; } + if ($offset > $size) { + $offset = $size; + warnings::warnif('misc', 'splice() offset past end of array') + if $splice_end_array; + } + # 'If LENGTH is omitted, removes everything from OFFSET onward.' if (not defined $length) { $length = $size - $offset; @@ -839,7 +837,7 @@ contents of the database. use warnings ; use strict ; use DB_File ; - use vars qw( %h $k $v ) ; + our (%h, $k, $v) ; unlink "fruit" ; tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0666, $DB_HASH @@ -989,7 +987,7 @@ code: use strict ; use DB_File ; - use vars qw($filename %h ) ; + my ($filename, %h) ; $filename = "tree" ; unlink $filename ; @@ -1044,7 +1042,7 @@ Here is the script above rewritten using the C API method. use strict ; use DB_File ; - use vars qw($filename $x %h $status $key $value) ; + my ($filename, $x, %h, $status, $key, $value) ; $filename = "tree" ; unlink $filename ; @@ -1116,7 +1114,7 @@ this: use strict ; use DB_File ; - use vars qw($filename $x %h ) ; + my ($filename, $x, %h) ; $filename = "tree" ; @@ -1166,9 +1164,9 @@ Assuming the database from the previous example: use strict ; use DB_File ; - use vars qw($filename $x %h $found) ; + my ($filename, $x, %h, $found) ; - my $filename = "tree" ; + $filename = "tree" ; # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; @@ -1205,9 +1203,9 @@ Again assuming the existence of the C database use strict ; use DB_File ; - use vars qw($filename $x %h $found) ; + my ($filename, $x, %h, $found) ; - my $filename = "tree" ; + $filename = "tree" ; # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; @@ -1251,7 +1249,7 @@ and print the first matching key/value pair given a partial key. use DB_File ; use Fcntl ; - use vars qw($filename $x %h $st $key $value) ; + my ($filename, $x, %h, $st, $key, $value) ; sub match { @@ -1450,7 +1448,7 @@ L). use warnings ; use strict ; - use vars qw(@h $H $file $i) ; + my (@h, $H, $file, $i) ; use DB_File ; use Fcntl ; @@ -2015,7 +2013,7 @@ F). use DB_File ; use Fcntl ; - use vars qw( $dotdir $HISTORY %hist_db $href $binary_time $date ) ; + my ($dotdir, $HISTORY, %hist_db, $href, $binary_time, $date) ; $dotdir = $ENV{HOME} || $ENV{LOGNAME}; $HISTORY = "$dotdir/.netscape/history.db"; @@ -2170,7 +2168,7 @@ Consider this script: use warnings ; use strict ; use DB_File ; - use vars qw(%x) ; + my %x ; tie %x, DB_File, "filename" ; Running it produces the error in question: @@ -2236,7 +2234,7 @@ compile properly on IRIX 5.3. =head1 COPYRIGHT -Copyright (c) 1995-2001 Paul Marquess. All rights reserved. This program +Copyright (c) 1995-2002 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.