
perlbug-followup at perl
Mar 15, 2010, 12:11 AM
Post #1 of 7
(200 views)
Permalink
|
|
[perl #73570] my $foo->{foo} = $foo; syntax valid only in perl > 5.10.0 ( unintentional change? )
|
|
# New Ticket Created by "perl [at] 0ne" # Please include the string: [perl #73570] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=73570 > This is a bug report for perl from perl [at] 0ne, generated with the help of perlbug 1.36 running under perl 5.10.0. ----------------------------------------------------------------- [Please enter your report here] While helping David Golden iron out bugs in the CPANTesters 2.0 code I stumbled across this bug in Metabase::Resource::cpan::distfile. Thanks to the help from various people in IRC, we've tracked it down to this commit: <+p5changes> Commit #a62b51b8(/Shinya Hayakawa): Re: my $x->{foo} doesn't work http://perl5.git.perl.org/perl.git/commit/a62b51b8 The bug is not that this "feature" should be removed. The bug is that the behavior is not documented anywhere. I checked perl5100delta.pod and perlsub.pod and no reference was made regarding this new syntax. Hopefully someone can look closer at the docs and see if it's actually noted somewhere and make it more obvious. Or, please feel free to kick my butt if it's there somewhere - I apologize for being tired today... Note: <xdg> perl/t/op/my.t has this line: ++my $x->{foo}; The perl testsuite already tests for this, I didn't know about it and made this crappy test :) Note2: You can do "ack 'my\s+\$\w+->\{' yourcode/" to find this syntax... [cpan [at] ubuntu-server6 ~]$ cat testsyntax.pl use strict; use warnings; use Data::Dumper; my $string = "foo"; my $cache->{dist_file} = $string; print Dumper( $cache ); [cpan [at] ubuntu-server6 ~]$ perl testsyntax.pl $VAR1 = { 'dist_file' => 'foo' }; [cpan [at] ubuntu-server6 ~]$ perl -v This is perl, v5.10.0 built for x86_64-linux-gnu-thread-multi Copyright 1987-2007, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. [cpan [at] ubuntu-server6 ~]$ perls/perl-5.8.9-default/bin/perl testsyntax.pl Can't use an undefined value as a HASH reference at testsyntax.pl line 5. [cpan [at] ubuntu-server6 ~]$ perls/perl-5.8.9-default/bin/perl -v This is perl, v5.8.9 built for x86_64-linux Copyright 1987-2008, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. [cpan [at] ubuntu-server6 ~]$ cat testsyntax2.pl use strict; use warnings; use Data::Dumper; my $string = "foo"; my $cache = { dist_file => $string }; print Dumper( $cache ); [cpan [at] ubuntu-server6 ~]$ perl testsyntax2.pl $VAR1 = { 'dist_file' => 'foo' }; [cpan [at] ubuntu-server6 ~]$ perls/perl-5.8.9-default/bin/perl testsyntax2.pl $VAR1 = { 'dist_file' => 'foo' }; [Please do not change anything below this line] ----------------------------------------------------------------- --- Flags: category=core severity=medium --- Site configuration information for perl 5.10.0: Configured by Debian Project at Thu Oct 1 22:36:47 UTC 2009. Summary of my perl5 (revision 5 version 10 subversion 0) configuration: Platform: osname=linux, osvers=2.6.24-23-server, archname=x86_64-linux-gnu-thread-multi uname='linux crested 2.6.24-23-server #1 smp wed apr 1 22:14:30 utc 2009 x86_64 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.10.0 -Dsitearch=/usr/local/lib/perl/5.10.0 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.0 -Dd_dosuid -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 -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 -I/usr/local/include' ccversion='', gccversion='4.4.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 =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64 libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=/lib/libc-2.10.1.so, so=so, useshrplib=true, libperl=libperl.so.5.10.0 gnulibc_version='2.10.1' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib' Locally applied patches: --- @INC for perl 5.10.0: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl . --- Environment for perl 5.10.0: HOME=/home/apoc LANG=en_US.UTF-8 LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games PERL_BADLANG (unset) SHELL=/bin/bash
|