http://www.perlmonks.org?node_id=415270


in reply to Re: recursive reference delete subroutine
in thread recursive reference delete subroutine

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.

Replies are listed 'Best First'.
Re^3: recursive reference delete subroutine
by Zed_Lopez (Chaplain) on Dec 16, 2004 at 05:30 UTC

    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' );