develooper Front page | perl.perl5.porters | Postings from May 2012

[perl #43356] magic autogeneration does not work as expected for ++ and --

Thread Previous
From:
Brian Fraser via RT
Date:
May 24, 2012 20:08
Subject:
[perl #43356] magic autogeneration does not work as expected for ++ and --
Message ID:
rt-3.6.HEAD-7788-1337915284-1436.43356-15-0@perl.org
On Sat Jun 23 16:32:43 2007, perl@plan9.de wrote:
> This is a bug report for perl from perl@plan9.de,
> generated with the help of perlbug 1.35 running under perl v5.8.8.
> 
> 
> -----------------------------------------------------------------
> [Please enter your report here]
> 
> The MAGIC AUTGEBNERATINO section in perldoc overload says:
> 
>    Increment and decrement
> 
>    The "++$a" operation can be expressed in a+=1" or "$a+1", and "$a--
>    " in
>    terms of "$a-=1" and "$a-1".
> 
> This leads me (I might be wrong) to believe that if an overlaoded
>    value
> has no "++", "+=" or "+" methods defined, then the fallback would
>    generate the
> equivalent to:
> 
>    $value = $value + 1
> 
> But this is not the case:
> 
>    use overload
>       "0+"     => sub { ${$_[0]} },
>       "="      => sub { ${$_[0]} },
>       fallback => 1;
> 
>    my $value = bless \(my $dummy = 1), __PACKAGE__;
> 
>    warn ++$value;
> 
> This outputs, on my system, the number 6886977 instead of the expected
>    2.
> 
> Using $value = $value + 1 gives me the expected result of "2".
> 
> One could argue that $value++ falls back to the non-overloaded way of
> doing things, taking the refrence and incrementing it by one, but then
>    I
> would still expected $a=$a+1 to work the same or similarly to $a++.
> 
> (Or otherwise some hint in the documentation that you have to overload
>    ++
> and -- even when you do not have to overload the other numeric
>    operators
> might be helpful).
> 
> [Please do not change anything below this line]
> -----------------------------------------------------------------
> ---
> Flags:
>     category=core
>     severity=low
> ---
> Site configuration information for perl v5.8.8:
> 
> Configured by Marc Lehmann at Sat Jan 20 00:23:48 CET 2007.
> 
> Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
>   Platform:
>     osname=linux, osvers=2.6.17.6, archname=amd64-linux
>     uname='linux cerebro 2.6.17.6 #1 smp fri oct 20 19:28:13 cest 2006
>    x86_64 gnulinux '
>     config_args='-Duselargefiles -Dxxxxuse64bitint -Uuse64bitall
>    -Dusemymalloc=n -Dcc=gcc -Dccflags=-DPERL_DONT_CREATE_GVSV_disabled
>    -ggdb -Dcppflags=-DPERL_DONT_CREATE_GVSV_disabled -D_GNU_SOURCE
>    -I/opt/include -Doptimize=-O6 -march=opteron -mtune=opteron
>    -funroll-loops -fno-strict-aliasing -Dcccdlflags=-fPIC
>    -Dldflags=-L/opt/perl/lib -L/opt/lib -Dlibs=-ldl -lm -lcrypt
>    -Darchname=amd64-linux -Dprefix=/opt/perl
>    -Dprivlib=/opt/perl/lib/perl5 -Darchlib=/opt/perl/lib/perl5
>    -Dvendorprefix=/opt/perl -Dvendorlib=/opt/perl/lib/perl5
>    -Dvendorarch=/opt/perl/lib/perl5 -Dsiteprefix=/opt/perl
>    -Dsitelib=/opt/perl/lib/perl5 -Dsitearch=/opt/perl/lib/perl5
>    -Dsitebin=/opt/perl/bin -Dman1dir=/opt/perl/man/man1
>    -Dman3dir=/opt/perl/man/man3 -Dsiteman1dir=/opt/perl/man/man1
>    -Dsiteman3dir=/opt/perl/man/man3 -Dman1ext=1 -Dman3ext=3
>    -Dpager=/usr/bin/less -Uafs -Uusesfio -Uusenm -Uuseshrplib
>    -Dd_dosuid -Dusethreads=undef -Duse5005threads=undef
>    -Duseithreads=undef -Dusemultiplicity=undef
>    -Demail=perl-binary@plan9.de -Dcf_email=perl-binary@plan9.de
>    -Dcf_by=Marc Lehmann -Dlocincpth=/opt/perl/include /opt/include
>    -Dmyhostname=localhost -Dmultiarch=undef -Dbin=/opt/perl/bin
>    -Dusedevel -des'
>     hint=recommended, useposix=true, d_sigaction=define
>     usethreads=undef use5005threads=undef useithreads=undef
>    usemultiplicity=undef
>     useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
>     use64bitint=define use64bitall=undef uselongdouble=undef
>     usemymalloc=n, bincompat5005=undef
>   Compiler:
>     cc='gcc', ccflags ='-DPERL_DONT_CREATE_GVSV_disabled -ggdb
>    -fno-strict-aliasing -pipe -I/opt/include -D_LARGEFILE_SOURCE
>    -D_FILE_OFFSET_BITS=64',
>     optimize='-O6 -march=opteron -mtune=opteron -funroll-loops
>    -fno-strict-aliasing',
>     cppflags='-DPERL_DONT_CREATE_GVSV_disabled -D_GNU_SOURCE
>    -I/opt/include -DPERL_DONT_CREATE_GVSV_disabled -ggdb
>    -fno-strict-aliasing -pipe -I/opt/include'
>     ccversion='', gccversion='4.1.2 20061115 (prerelease) (Debian
>    4.1.1-21)', 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='gcc', ldflags ='-L/opt/perl/lib -L/opt/lib -L/usr/local/lib'
>     libpth=/usr/local/lib /lib /usr/lib
>     libs=-ldl -lm -lcrypt
>     perllibs=-ldl -lm -lcrypt
>     libc=/lib/libc-2.3.6.so, so=so, useshrplib=false,
>    libperl=libperl.a
>     gnulibc_version='2.3.6'
>   Dynamic Linking:
>     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
>     cccdlflags='-fPIC', lddlflags='-shared -L/opt/perl/lib -L/opt/lib
>    -L/usr/local/lib'
> 
> Locally applied patches:
>     MAINT29832
> 
> ---
> @INC for perl v5.8.8:
>     /root/src/sex
>     /opt/perl/lib/perl5
>     /opt/perl/lib/perl5
>     /opt/perl/lib/perl5
>     /opt/perl/lib/perl5
>     /opt/perl/lib/perl5
>     .
> 
> ---
> Environment for perl v5.8.8:
>     HOME=/root
>     LANG (unset)
>     LANGUAGE (unset)
>     LC_CTYPE=de_DE.UTF-8
>     LD_LIBRARY_PATH (unset)
>     LOGDIR (unset)
>    
PATH=/root/s2:/root/s:/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11/bin:/usr/games:/usr/local/bin:/usr/local/sbin:/root/src/uunet:.
>     PERL5LIB=/root/src/sex
>     PERL5_CPANPLUS_CONFIG=/root/.cpanplus/config
>     PERLDB_OPTS=ornaments=0
>     PERL_BADLANG (unset)
>     PERL_UNICODE=EAL
>     SHELL=/bin/bash

While the code's behavior hasn't changed, overload.pm has a "Minimal Set
of Overloaded Operations" section, which addresses the OP's concerns.
Should this ticket be closed?


---
via perlbug:  queue: perl5 status: new
https://rt.perl.org:443/rt3/Ticket/Display.html?id=43356

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About