Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: recursive reference delete subroutine

by Zed_Lopez (Chaplain)
on Dec 15, 2004 at 18:08 UTC ( #415129=note: print w/replies, xml ) Need Help??

in reply to recursive reference delete subroutine

undef $ref;

should do it for you -- if its referent's reference count drops to zero, its memory will be freed automatically (and so on, recursively.)

Keep in mind, the memory is only freed for reuse by your program, not to the OS, but that shouldn't be hurting you here.

So my guesses would be that either you have a memory leak, or that you just plain don't have enough memory for your current algorithm with the data you're using, and you'll have to be cleverer about the algorithm -- no amount of undeffing or deleting is going to save you.

Replies are listed 'Best First'.
Re^2: recursive reference delete subroutine
by chromatic (Archbishop) on Dec 16, 2004 at 02:43 UTC

    I disagree; I think that answer merely hopes for a solution instead of answering the question directly.

    use Test::More tests => 2; sub undef_hash { my $ref = shift; undef $ref; } sub assign_hash { my $ref = shift; %$ref = (); } my $hash_one = { qw( foo bar baz quux ) }; undef_hash( $hash_one ); is( keys %$hash_one, 2, 'undef on hash reference should not clear it' ); my $hash_two = { qw( foo bar baz quux ) }; assign_hash( $hash_two ); is( keys %$hash_two, 0, 'assigning empty list to hash reference should clear it' );

    Update: Ahh, I misunderstood. Yes, replacing the subcall will probably work.

      I was presuming the OP would replace the calls to deleteref with just the undef. You're right, of course, that making a copy of the reference in a subroutine and undeffing that is a no-op.

      use Test::More tests => 2; sub deleteref { my $h = shift; undef $h; } my $c = {d => 3}; deleteref($c); is( keys %$c, 1, 'undef on copy of hashref in a subroutine should not clear it' ); undef $c; is( keys %$c, 0, 'undef on hash reference, not a copy of it in a subroutine, should + clear it' );

Log In?

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (3)
As of 2023-12-04 07:24 GMT
Find Nodes?
    Voting Booth?
    What's your preferred 'use VERSION' for new CPAN modules in 2023?

    Results (21 votes). Check out past polls.