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