Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Error deleting DBM::Deep file (ref count?)

by Athanasius (Archbishop)
on Jun 06, 2012 at 03:32 UTC ( [id://974626]=note: print w/replies, xml ) Need Help??


in reply to Error deleting DBM::Deep file (ref count?)

Hi bobf,

I’ve not used this module before, but in playing around with your code I’ve made the following observations:

(1) Your results are duplicated on my system, which is Strawberry Perl 5.14.2 running on Vista 32-bit.

(2) If I add a call to Data::Dumper like so:

use Data::Dumper; ... { my $db = DBM::Deep->new( $db_file ); $db->{key} = {}; print "Dump: ", Dumper($db); }

then href_nocopy fails with the same permission denied error as for href_copy.

(3) If I add $db->clear(); before the call to unlink, the permission denied errors go away:

use strict; use warnings; use DBM::Deep; use Data::Dumper; use constant DUMP => 0; # 1 for debugging { my $db_file = 'href_nocopy'; { my $db = DBM::Deep->new( $db_file ); $db->{key} = {}; print "Dump: ", Dumper($db) if DUMP; $db->clear(); } print "\nDeleting $db_file\n"; unlink( $db_file ) or warn $!; # succeeds $db_file = 'href_copy'; { my $db = DBM::Deep->new( $db_file ); $db->{key} = {}; my $db2 = $db->{key}; print "\nDump: ", Dumper($db) if DUMP; print "Dump: ", Dumper($db2) if DUMP; $db->clear(); } print "\nDeleting $db_file\n"; unlink( $db_file ) or warn $!; # now succeeds! $db_file = 'nonref_copy'; { my $db = DBM::Deep->new( $db_file ); $db->{key} = 1; my $db2 = $db->{key}; print "\nDump: ", Dumper($db) if DUMP; print "Dump: ", Dumper($db2) if DUMP; $db->clear(); } print "\nDeleting $db_file\n"; unlink( $db_file ) or warn $!; # succeeds }

I don’t know what is going on, but maybe the above observations will help?

Regards,

Athanasius <°(((><contra mundum

Replies are listed 'Best First'.
Re^2: Error deleting DBM::Deep file (ref count?)
by bobf (Monsignor) on Jun 06, 2012 at 14:26 UTC

    Thanks very much for looking into this. Interesting observation re: Data::Dumper causing a similar error message. I didn't try to dump the structure so I didn't encounter that behavior.

    I confirmed that calling clear will avoid the error on my system. If it works in my production code as well, I'll declare (partial) victory. I wonder what the root cause is, though.

    Thanks for the idea.

    Update: I tried this in my production code but it did not work. I also tried calling the unlock method, but to no avail.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://974626]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2024-04-24 23:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found