> [EMAIL PROTECTED] - Sun Jul 31 23:23:50 2005]:
> 
> 
> This is a bug report for perl from [EMAIL PROTECTED],
> generated with the help of perlbug 1.35 running under perl v5.8.6.
> 
> 
> -----------------------------------------------------------------
> The construct
> local %SIG = %SIG;
> does *not* make an exact local copy of %SIG, as it should.
> 
> The program
> 
> perl -e 'print scalar keys %SIG,"\n"; local %SIG = %SIG; print scalar
>    keys %SIG, "\n"'
> prints
> 
> 49
> 0
> 
> instead of (something like)
> 
> 49
> 49
> 
> as it should.
> 
> For comparison, another "magic" hash, %ENV, does not have the same
>    problem.
> 
> perl -e 'print scalar keys %ENV,"\n"; local %ENV = %ENV; print scalar
>    keys %ENV, "\n"'
> 61
> 61
> 

I added Devel::Peek to see more of what's going on.  I'm guessing the
copy during localization is not working correctly in this case.  The
following chunk of code from mg.c may hold the key to the problem.

        if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy) {
            /* XXX calling the copy method is probably not correct. DAPM */
            (void)CALL_FPTR(vtbl->svt_copy)(aTHX_ sv, mg, nsv,
                                    mg->mg_ptr, mg->mg_len);
        }

[EMAIL PROTECTED]:~/perl-current$ perl -MDevel::Peek -le'print scalar keys
%SIG; print Dump \%SIG; local %SIG = %SIG; print scalar keys %SIG; print
Dump \%SIG'
69
SV = RV(0x81751a8) at 0x814dc28
  REFCNT = 1
  FLAGS = (TEMP,ROK)
  RV = 0x817ea98
  SV = PVHV(0x8152130) at 0x817ea98
    REFCNT = 2
    FLAGS = (RMG,SHAREKEYS)
    IV = 69
    NV = 0
    MAGIC = 0x8185820
      MG_VIRTUAL = &PL_vtbl_sig
      MG_TYPE = PERL_MAGIC_sig(S)
    ARRAY = 0x8187a50  (0:75, 1:42, 2:7, 3:3, 4:1)
    hash quality = 93.5%
    KEYS = 69
    FILL = 53
    MAX = 127
    RITER = -1
    EITER = 0x0
    Elt "NUM63" HASH = 0xcfaba382
    SV = PVMG(0x81635f0) at 0x817ed8c
      REFCNT = 1
      FLAGS = (GMG,SMG,RMG)
      IV = 0
      NV = 0
      PV = 0
      MAGIC = 0x81879c0
        MG_VIRTUAL = &PL_vtbl_sigelem
        MG_TYPE = PERL_MAGIC_sigelem(s)
        MG_LEN = 5
        MG_PTR = 0x81879e0 "NUM63"
    Elt "TRAP" HASH = 0xdc841002
    SV = PVMG(0x8162eb0) at 0x817ead4
      REFCNT = 1
      FLAGS = (GMG,SMG,RMG)
      IV = 0
      NV = 0
      PV = 0
      MAGIC = 0x8185930
        MG_VIRTUAL = &PL_vtbl_sigelem
        MG_TYPE = PERL_MAGIC_sigelem(s)
        MG_LEN = 4
        MG_PTR = 0x8185950 "TRAP"
    Elt "NUM42" HASH = 0x2ea7df85
    SV = PVMG(0x8163350) at 0x817ec90
      REFCNT = 1
      FLAGS = (GMG,SMG,RMG)
      IV = 0
      NV = 0
      PV = 0
      MAGIC = 0x81821b8
        MG_VIRTUAL = &PL_vtbl_sigelem
        MG_TYPE = PERL_MAGIC_sigelem(s)
        MG_LEN = 5
        MG_PTR = 0x81838f0 "NUM42"

0
SV = RV(0x81751a8) at 0x814dc28
  REFCNT = 1
  FLAGS = (TEMP,ROK)
  RV = 0x818be1c
  SV = PVHV(0x8152190) at 0x818be1c
    REFCNT = 2
    FLAGS = (RMG,SHAREKEYS)
    IV = 0
    NV = 0
    MAGIC = 0x8185820
      MG_VIRTUAL = &PL_vtbl_sig
      MG_TYPE = PERL_MAGIC_sig(S)
    ARRAY = 0x0
    KEYS = 0
    FILL = 0
    MAX = 7
    RITER = -1
    EITER = 0x0


Reply via email to