Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data::Dumper -- undef not recognized as "false" in config booleans #12135

Closed
p5pRT opened this issue May 26, 2012 · 10 comments
Closed

Data::Dumper -- undef not recognized as "false" in config booleans #12135

p5pRT opened this issue May 26, 2012 · 10 comments

Comments

@p5pRT
Copy link

p5pRT commented May 26, 2012

Migrated from rt.perl.org#113090 (status was 'resolved')

Searchable as RT113090$

@p5pRT
Copy link
Author

p5pRT commented May 26, 2012

From @jimav

Created by @jimav

This is a bug report for perl from james_avera@​yahoo.com,
generated with the help of perlbug 1.39 running under perl 5.12.4.

-----------------------------------------------------------------
Some of Data​::Dumper's configuration methods accept "boolean"
arguments. However passing undef for "false" causes incorrect
behavior (the methods return the old value rather than setting
a new value).

This is not a big deal, but if you want to make them accept undef
as a valid form of "false", here is a patch​:

Inline Patch
--- Dumper.pm	2012-05-26 04:25:18.236706958 +0000
+++ Dumper.pm.ORIG	2012-05-25 19:06:41.775175838 +0000
@@ -607,17 +607,17 @@

  sub Purity {
    my($s, $v) = @_;
-  @_ >= 2 ? (($s->{purity} = $v), return $s) : $s->{purity};
+  defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
  }

  sub Useqq {
    my($s, $v) = @_;
-  @_ >= 2 ? (($s->{useqq} = $v), return $s) : $s->{useqq};
+  defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
  }

  sub Terse {
    my($s, $v) = @_;
-  @_ >= 2 ? (($s->{terse} = $v), return $s) : $s->{terse};
+  defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
  }

  sub Freezer {
@@ -632,12 +632,12 @@

  sub Deepcopy {
    my($s, $v) = @_;
-  @_ >= 2 ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
+  defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
  }

  sub Quotekeys {
    my($s, $v) = @_;
-  @_ >= 2 ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
+  defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
  }

  sub Bless {
@@ -652,17 +652,17 @@

  sub Useperl {
    my($s, $v) = @_;
-  @_ >= 2 ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'};
+  defined($v) ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'};
  }

  sub Sortkeys {
    my($s, $v) = @_;
-  @_ >= 2 ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'};
+  defined($v) ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'};
  }

  sub Deparse {
    my($s, $v) = @_;
-  @_ >= 2 ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'};
+  defined($v) ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'};
  }

  # used by qquote below
Perl Info

Flags:
     category=library
     severity=wishlist
     module=Data::Dumper

Site configuration information for perl 5.12.4:

Configured by Debian Project at Tue Sep  6 08:08:24 UTC 2011.

Summary of my perl5 (revision 5 version 12 subversion 4) configuration:

   Platform:
     osname=linux, osvers=2.6.24-28-server, 
archname=x86_64-linux-gnu-thread-multi
     uname='linux allspice 2.6.24-28-server #1 smp wed aug 18 21:17:51 
utc 2010 x86_64 x86_64 x86_64 gnulinux '
     config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN 
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr 
-Dprivlib=/usr/share/perl/5.12 -Darchlib=/usr/lib/perl/5.12 
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local 
-Dsitelib=/usr/local/share/perl/5.12.4 
-Dsitearch=/usr/local/lib/perl/5.12.4 -Dman1dir=/usr/share/man/man1 
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 
-Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 
-Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm 
-Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib 
-Dlibperl=libperl.so.5.12.4 -des'
     hint=recommended, useposix=true, d_sigaction=define
     useithreads=define, usemultiplicity=define
     useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
     use64bitint=define, use64bitall=define, uselongdouble=undef
     usemymalloc=n, bincompat5005=undef
   Compiler:
     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN 
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include 
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
     optimize='-O2 -g',
     cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing 
-pipe -fstack-protector -I/usr/local/include'
     ccversion='', gccversion='4.6.1', gccosandvers=''
     intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
     ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
     alignbytes=8, prototype=define
   Linker and Libraries:
     ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
     libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib 
/usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib
     libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
     perllibs=-ldl -lm -lpthread -lc -lcrypt
     libc=, so=so, useshrplib=true, libperl=libperl.so.5.12.4
     gnulibc_version='2.13'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
     cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib 
-fstack-protector'

Locally applied patches:



@INC for perl 5.12.4:
     /home/jima/local/share/perl/5.12.4
     /home/jima/local/share/perl
     /home/jima/lib/perl
     /etc/perl
     /usr/local/lib/perl/5.12.4
     /usr/local/share/perl/5.12.4
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.12
     /usr/share/perl/5.12
     /usr/local/lib/site_perl
     .


Environment for perl 5.12.4:
     HOME=/home/jima
     LANG=en_US.UTF-8
     LANGUAGE (unset)
     LD_LIBRARY_PATH=/home/jima/local/lib
     LOGDIR (unset)
 
PATH=/home/jima/bin:/home/jima/local/bin:/home/jima/jima_tools/x86_64/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/bin/X11:/usr/local/bin:/opt/openoffice.org3/program:/usr/local/games:/usr/games:.
     PERL5LIB=/home/jima/local/share/perl:/home/jima/lib/perl
     PERL_BADLANG (unset)
     SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented May 26, 2012

From @cpansprout

On Fri May 25 21​:30​:52 2012, jimav wrote​:

This is a bug report for perl from james_avera@​yahoo.com,
generated with the help of perlbug 1.39 running under perl 5.12.4.

-----------------------------------------------------------------
Some of Data​::Dumper's configuration methods accept "boolean"
arguments. However passing undef for "false" causes incorrect
behavior (the methods return the old value rather than setting
a new value).

This is not a big deal, but if you want to make them accept undef
as a valid form of "false", here is a patch​:

I think this is a good idea, and that Freezer and Toaster should also
get the same change, so that ->Freezer(undef) becomes the same as
->Freezer("").

Could you perhaps include some tests for this? Also, please note that
your patch is reversed. :-)

--- Dumper.pm 2012-05-26 04​:25​:18.236706958 +0000
+++ Dumper.pm.ORIG 2012-05-25 19​:06​:41.775175838 +0000
@​@​ -607,17 +607,17 @​@​

sub Purity {
my($s, $v) = @​_;
- @​_ >= 2 ? (($s->{purity} = $v), return $s) : $s->{purity};
+ defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
}

sub Useqq {
my($s, $v) = @​_;
- @​_ >= 2 ? (($s->{useqq} = $v), return $s) : $s->{useqq};
+ defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
}

sub Terse {
my($s, $v) = @​_;
- @​_ >= 2 ? (($s->{terse} = $v), return $s) : $s->{terse};
+ defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
}

sub Freezer {
@​@​ -632,12 +632,12 @​@​

sub Deepcopy {
my($s, $v) = @​_;
- @​_ >= 2 ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
+ defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
}

sub Quotekeys {
my($s, $v) = @​_;
- @​_ >= 2 ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
+ defined($v) ? (($s->{quotekeys} = $v), return $s) : $s-

{quotekeys};
}

sub Bless {
@​@​ -652,17 +652,17 @​@​

sub Useperl {
my($s, $v) = @​_;
- @​_ >= 2 ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'};
+ defined($v) ? (($s->{'useperl'} = $v), return $s) : $s-

{'useperl'};
}

sub Sortkeys {
my($s, $v) = @​_;
- @​_ >= 2 ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'};
+ defined($v) ? (($s->{'sortkeys'} = $v), return $s) : $s-

{'sortkeys'};
}

sub Deparse {
my($s, $v) = @​_;
- @​_ >= 2 ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'};
+ defined($v) ? (($s->{'deparse'} = $v), return $s) : $s-

{'deparse'};
}

# used by qquote below

[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags​:
category=library
severity=wishlist
module=Data​::Dumper
---
Site configuration information for perl 5.12.4​:

Configured by Debian Project at Tue Sep 6 08​:08​:24 UTC 2011.

Summary of my perl5 (revision 5 version 12 subversion 4)
configuration​:

Platform​:
osname=linux, osvers=2.6.24-28-server,
archname=x86_64-linux-gnu-thread-multi
uname='linux allspice 2.6.24-28-server #1 smp wed aug 18 21​:17​:51
utc 2010 x86_64 x86_64 x86_64 gnulinux '
config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.12 -Darchlib=/usr/lib/perl/5.12
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
-Dsitelib=/usr/local/share/perl/5.12.4
-Dsitearch=/usr/local/lib/perl/5.12.4 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
-Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1
-Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh
-Ud_ualarm
-Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2
-Duseshrplib
-Dlibperl=libperl.so.5.12.4 -des'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define,
usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler​:
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2 -g',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
-fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.6.1', gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8,
byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define,
longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8,
Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries​:
ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib
/usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib
libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
perllibs=-ldl -lm -lpthread -lc -lcrypt
libc=, so=so, useshrplib=true, libperl=libperl.so.5.12.4
gnulibc_version='2.13'
Dynamic Linking​:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib
-fstack-protector'

Locally applied patches​:

---
@​INC for perl 5.12.4​:
/home/jima/local/share/perl/5.12.4
/home/jima/local/share/perl
/home/jima/lib/perl
/etc/perl
/usr/local/lib/perl/5.12.4
/usr/local/share/perl/5.12.4
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.12
/usr/share/perl/5.12
/usr/local/lib/site_perl
.

---
Environment for perl 5.12.4​:
HOME=/home/jima
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH=/home/jima/local/lib
LOGDIR (unset)

PATH=/home/jima/bin​:/home/jima/local/bin​:/home/jima/jima_tools/x86_64/bin​:/usr/bin​:/bin​:/usr/sbin​:/sbin​:/usr/bin/X11​:/usr/local/bin​:/opt/openoffice.org3/program​:/usr/local/games​:/usr/games​:.

 PERL5LIB=/home/jima/local/share/perl​:/home/jima/lib/perl
 PERL\_BADLANG \(unset\)
 SHELL=/bin/bash

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented May 26, 2012

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented May 27, 2012

From @demerphq

On 26 May 2012 06​:56, Father Chrysostomos via RT
<perlbug-followup@​perl.org> wrote​:

On Fri May 25 21​:30​:52 2012, jimav wrote​:

This is a bug report for perl from james_avera@​yahoo.com,
generated with the help of perlbug 1.39 running under perl 5.12.4.

-----------------------------------------------------------------
Some of Data​::Dumper's configuration methods accept "boolean"
arguments.  However passing undef for "false" causes incorrect
behavior (the methods return the old value rather than setting
a new value).

This is not a big deal, but if you want to make them accept undef
as a valid form of "false", here is a patch​:

I think this is a good idea, and that Freezer and Toaster should also
get the same change, so that ->Freezer(undef) becomes the same as
->Freezer("").

Could you perhaps include some tests for this?  Also, please note that
your patch is reversed. :-)

We should check that this does not interact with the dynamically
scoped var equivalents. I have a feeling it might in subtle ways.

Yves

--
perl -Mre=debug -e "/just|another|perl|hacker/"

@p5pRT
Copy link
Author

p5pRT commented May 29, 2012

From @jimav

Sorry about the reversed patch. A corrected patch (including Freezer &
Toaster) is attached.

I have used the modified code, but not exhaustively tested every method.
Does a test suite already exist somewhere (as with CPAN modules)?

@p5pRT
Copy link
Author

p5pRT commented May 29, 2012

From @jimav

Inline Patch
--- Dumper.pm.ORIG	2012-05-25 19:06:41.775175838 +0000
+++ Dumper.pm	2012-05-26 21:28:30.603511523 +0000
@@ -607,37 +607,37 @@
 
 sub Purity {
   my($s, $v) = @_;
-  defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
+  @_ >= 2 ? (($s->{purity} = $v), return $s) : $s->{purity};
 }
 
 sub Useqq {
   my($s, $v) = @_;
-  defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
+  @_ >= 2 ? (($s->{useqq} = $v), return $s) : $s->{useqq};
 }
 
 sub Terse {
   my($s, $v) = @_;
-  defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
+  @_ >= 2 ? (($s->{terse} = $v), return $s) : $s->{terse};
 }
 
 sub Freezer {
   my($s, $v) = @_;
-  defined($v) ? (($s->{freezer} = $v), return $s) : $s->{freezer};
+  @_ >= 2 ? (($s->{freezer} = $v), return $s) : $s->{freezer};
 }
 
 sub Toaster {
   my($s, $v) = @_;
-  defined($v) ? (($s->{toaster} = $v), return $s) : $s->{toaster};
+  @_ >= 2 ? (($s->{toaster} = $v), return $s) : $s->{toaster};
 }
 
 sub Deepcopy {
   my($s, $v) = @_;
-  defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
+  @_ >= 2 ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
 }
 
 sub Quotekeys {
   my($s, $v) = @_;
-  defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
+  @_ >= 2 ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
 }
 
 sub Bless {
@@ -652,17 +652,17 @@
 
 sub Useperl {
   my($s, $v) = @_;
-  defined($v) ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'};
+  @_ >= 2 ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'};
 }
 
 sub Sortkeys {
   my($s, $v) = @_;
-  defined($v) ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'};
+  @_ >= 2 ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'};
 }
 
 sub Deparse {
   my($s, $v) = @_;
-  defined($v) ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'};
+  @_ >= 2 ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'};
 }
 
 # used by qquote below

@p5pRT
Copy link
Author

p5pRT commented Dec 12, 2017

From zefram@fysh.org

Fixed by commit dd9e86b.

-zefram

@p5pRT
Copy link
Author

p5pRT commented Dec 12, 2017

@iabyn - Status changed from 'open' to 'pending release'

@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2018

From @khwilliamson

Thank you for filing this report. You have helped make Perl better.

With the release yesterday of Perl 5.28.0, this and 185 other issues have been
resolved.

Perl 5.28.0 may be downloaded via​:
https://metacpan.org/release/XSAWYERX/perl-5.28.0

If you find that the problem persists, feel free to reopen this ticket.

@p5pRT p5pRT closed this as completed Jun 23, 2018
@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2018

@khwilliamson - Status changed from 'pending release' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant