develooper Front page | perl.perl5.porters | Postings from September 2013

[perl #119803] $ISA[0] assignment does not work

Father Chrysostomos
September 15, 2013 20:14
[perl #119803] $ISA[0] assignment does not work
Message ID:
# New Ticket Created by  Father Chrysostomos 
# Please include the string:  [perl #119803]
# in the subject line of all future correspondence about this issue. 
# <URL: >

$ ./perl -Ilib -e '$ISA[0] = foo'
Recursive inheritance detected in package 'main' at -e line 1.

$ ../perl.git/Porting/ --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:
We cannot bisect more!
bisect run cannot continue any more
Died at ../perl.git/Porting/ 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.

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
    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
    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
  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:

Environment for perl 5.19.4:
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PERL_BADLANG (unset)
    SHELL=/bin/bash Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About