Front page | perl.perl5.porters |
Postings from September 2013
[perl #119803] $ISA[0] assignment does not work
From:
Father Chrysostomos
Date:
September 15, 2013 20:14
Subject:
[perl #119803] $ISA[0] assignment does not work
Message ID:
rt-3.6.HEAD-1873-1379276070-316.119803-75-0@perl.org
# New Ticket Created by Father Chrysostomos
# Please include the string: [perl #119803]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=119803 >
$ ./perl -Ilib -e '$ISA[0] = foo'
Recursive inheritance detected in package 'main' at -e line 1.
$ ../perl.git/Porting/bisect.pl --end=v5.10.0 --target=miniperl -e '$ISA[0] = "foo"'
...
There are only 'skip'ped commits left to test.
The first bad commit could be any of:
14f97ce6b1baa27085a0b448ebaba39310e8ed92
b0c482e323c9b6fa5590fdfb97e98a5b7645a046
e1a479c5e0c08fb10925261f03573261c69ca0dc
f40a71547d2bd6a615ed0adc05312d62f7dffc29
9edc5bb88e22f179a8e93ef946255446e35178fa
We cannot bisect more!
bisect run cannot continue any more
Died at ../perl.git/Porting/bisect.pl line 223.
That took 554 seconds
So this goes back to the mro changes in 5.10.
Perl is too trigger-happy when it comes to recursive inheritance.
One problem with that error message is that it doesn’t prevent anything bad from happening (like ‘Modification of a read-only value attempted’). It only happens *after* the bad inheritance has already been set up. (The same applies to class hierarchies incompatible with C3.)
So the error does not do that much good, even in an eval, since some other benign code might trip up on that same error.
Something tells me we have an architectural problem of sorts.
Obviously, if you are actually trying to call a method and you have @Foo::ISA = Foo, then the method call should croak.
But internal bookkeeping that happens at the time of @ISA adjustment should probably simply be deferred if the hierarchy is nonsensical.
---
Flags:
category=core
severity=low
---
Site configuration information for perl 5.19.4:
Configured by sprout at Mon Sep 9 00:16:24 PDT 2013.
Summary of my perl5 (revision 5 version 19 subversion 4) configuration:
Commit id: d47819ff6f55bfaa4b7eddc66c6db7d7dfdec11c
Platform:
osname=darwin, osvers=12.2.0, archname=darwin-2level
uname='darwin pint.local 12.2.0 darwin kernel version 12.2.0: sat aug 25 00:48:52 pdt 2012; root:xnu-2050.18.24~1release_x86_64 x86_64 '
config_args='-de -Dcc=gcc -Dusedevel -Doptimize=-ggdb3 -Aoptimize=-O0 -DDEBUGGING'
hint=recommended, useposix=true, d_sigaction=define
useithreads=undef, usemultiplicity=undef
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
optimize='-ggdb3 -O0',
cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)', 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='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
libpth=/usr/local/lib /usr/lib
libs=-ldbm -ldl -lm -lutil -lc
perllibs=-ldl -lm -lutil -lc
libc=, so=dylib, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'
---
@INC for perl 5.19.4:
lib
/usr/local/lib/perl5/site_perl/5.19.4/darwin-2level
/usr/local/lib/perl5/site_perl/5.19.4
/usr/local/lib/perl5/5.19.4/darwin-2level
/usr/local/lib/perl5/5.19.4
/usr/local/lib/perl5/site_perl
.
---
Environment for perl 5.19.4:
DYLD_LIBRARY_PATH (unset)
HOME=/Users/sprout
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/bin
PERL_BADLANG (unset)
SHELL=/bin/bash
-
[perl #119803] $ISA[0] assignment does not work
by Father Chrysostomos