in reply to BackupPC or Data::Dumper playing foul...?
It would help if you could define what you mean by "works fine" and "fails", ideally by giving an sscce.
According to the docs, the intention when supplying [*value] is that the output will assign a name appropriate to the type of the value: if you give it a hashref to dump, it will assume it actually represents a hash called %value, for example. It appears this has been broken for a long time, and was recently fixed - a quick scan of the Changes file (https://metacpan.org/dist/Data-Dumper/changes) suggests it may have been the very recent 2.182_51 change.
With latest bleadperl (which has v2.184, not yet available on CPAN), I get:
% perl -MData::Dumper -e ' my %h = (one => 1); $h{refone} = \$h{one}; # make it a self-referential structure my $d = Data::Dumper->new([\%h], [*value]); $d->Indent(1); $d->Terse(1); $d->Sortkeys(1); print $d->Dump; ' ( 'one' => 1, 'refone' => \$main::value{'one'} )
.. which I believe is the correct intended output. With older versions (back at least as far as maint-5.8) I get instead:
{ 'one' => 1, 'refone' => \$VAR1->{'one'} }
.. which is wrong, since it refers to $VAR1 instead of to %value.
By changing it to \[*value] I guess you have turned it into something Dump() does not recognise, so it ignores it. The result is that you get the same output as the previous broken behaviour. You can achieve the same by removing the [*value] arrayref altogether.
(I'm slightly worried that the changelog states that this was a fix only for the XS code: additionally calling $d->Useperl(1) before the Dump() call does not change the output in either case for me, so it's possible I'm completely misunderstanding what's going on.)
Hugo
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: BackupPC or Data::Dumper playing foul...?
by Krambambuli (Curate) on Apr 08, 2022 at 18:20 UTC | |
by hv (Prior) on Apr 08, 2022 at 20:41 UTC | |
by Krambambuli (Curate) on Apr 08, 2022 at 21:55 UTC | |
by dsheroh (Monsignor) on Apr 11, 2022 at 07:20 UTC |