Bug#401132: Devel::Peek enhancement
Dominic Hargreaves
dom at earth.li
Fri Jul 12 22:59:14 UTC 2013
On Wed, Jan 27, 2010 at 10:06:39AM -0800, Robert Stone wrote:
> On Wed, Jan 27, 2010 at 12:31:44PM +0200, Niko Tyni wrote:
> >
> > Sorry for the lack of action on this.
>
> No problem at all, thanks for looking into this.
> >
> > What's wrong with Devel::Peek:SvREFCNT(\%m) ?
>
> "\%m" is a reference constructor, so SvREFCNT() ends up
> reporting the reference count of that newly constructed SV. The
> situation can be illustrated with this small script:
>
> #!/usr/bin/perl
> use strict;
> use warnings;
> use Devel::Peek;
> my %m = (a => 'b');
> my $mr = \%m;
> Devel::Peek::Dump($mr);
> print Devel::Peek::SvREFCNT(\%m), "\n";
>
> From the Dump you can see that %m (the PVHV) has a refcount of
> 2, but "Devel::Peek::SvREFCNT(\%m)" reports 1. The reason for this can
> be illustrated by breaking that call up a little bit. One would
> normally expect that:
>
> Devel::Peek::SvREFCNT(\%m)
>
> should be equivalent to
>
> my $tmp = \%m;
> Devel::Peek::SvREFCNT($tmp)
>
> which unsurprisingly reports a refcount of 1 for $tmp. Nothing changes
> when $tmp is an immediate, unlabeled value on the argument stack to
> SvREFCNT() and I think that's expected and correct behavior.
>
> The proposed patch solves this difficulty by always passing the
> argument from Perl by reference and then unconditionally dereferencing
> to access the target value.
Hi Robert,
Sorry for the delay in pointing this, but I forwarded this to the
upstream bug tracker and various people are discussing a fix.
https://rt.perl.org/rt3//Ticket/Display.html?id=117793
Cheers,
Dominic.
More information about the Perl-maintainers
mailing list