develooper 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




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