Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Different behaviour of 'stat' function after assignment to $! (errno).

by jpl (Monk)
on May 24, 2011 at 11:27 UTC ( #906473=note: print w/ replies, xml ) Need Help??


in reply to Re: Different behaviour of 'stat' function after assignment to $! (errno).
in thread Different behaviour of 'stat' function after assignment to $! (errno).

I can reproduce it, but not explain it.

use Devel::Peek; $! = 0; Dump($!); stat("non_existing_file"); Dump($!); die "died at first stat" if -$!; stat("non_existing_file"); Dump($!); die "died at second stat" if -$!;
yields
SV = PVMG(0x214d690) at 0x2124478 REFCNT = 1 FLAGS = (GMG,SMG,pIOK) IV = 0 NV = 0 PV = 0 MAGIC = 0x2125900 MG_VIRTUAL = &PL_vtbl_sv MG_TYPE = PERL_MAGIC_sv(\0) MG_OBJ = 0x2124460 MG_LEN = 1 MG_PTR = 0x21242d0 "!" SV = PVMG(0x214d690) at 0x2124478 REFCNT = 1 FLAGS = (GMG,SMG,pIOK) IV = 0 NV = 0 PV = 0 MAGIC = 0x2125900 MG_VIRTUAL = &PL_vtbl_sv MG_TYPE = PERL_MAGIC_sv(\0) MG_OBJ = 0x2124460 MG_LEN = 1 MG_PTR = 0x21242d0 "!" SV = PVMG(0x214d690) at 0x2124478 REFCNT = 1 FLAGS = (GMG,SMG,pNOK,pPOK) IV = 0 NV = 2 PV = 0x21243a0 "No such file or directory"\0 CUR = 25 LEN = 32 MAGIC = 0x2125900 MG_VIRTUAL = &PL_vtbl_sv MG_TYPE = PERL_MAGIC_sv(\0) MG_OBJ = 0x2124460 MG_LEN = 1 MG_PTR = 0x21242d0 "!" died at second stat at bug.pl line 9.
Nothing "funny" has been done to $! before the second Dump, but it hasn't changed since before the stat.


Comment on Re^2: Different behaviour of 'stat' function after assignment to $! (errno).
Select or Download Code
Re^3: Different behaviour of 'stat' function after assignment to $! (errno).
by Anonymous Monk on May 24, 2011 at 11:45 UTC
    Nothing "funny" has been done to $! before the second Dump, but it hasn't changed since before the stat.

    $! , errno, is supposed to be positive, so using -$! is something funny :)

      $! , errno, is supposed to be positive, so using -$! is something funny :)
      All the "funny" stuff happens after the second Dump, which happens immediately after the stat. Unless the optimizer is punishing us for something that is going to happen later, I cannot explain why the failing stat did not appear to modify $!.
        It does modify $!, but its only reflected when you Peek if you put $! in int/boolean/string context first, because Peek won't force the conversion. The assignment modified the IV slot, but stat modified the NV/PV slot.
        $ perl -MDevel::Peek -E " stat 1; Dump($!); $!=666; stat 1; $! and Dum +p($!); " SV = PVMG(0x9b3bfc) at 0x9ba5ec REFCNT = 1 FLAGS = (GMG,SMG) IV = 0 NV = 0 PV = 0 MAGIC = 0x9d904c MG_VIRTUAL = &PL_vtbl_sv MG_TYPE = PERL_MAGIC_sv(\0) MG_OBJ = 0x9ba61c MG_LEN = 1 MG_PTR = 0x9da014 "!" SV = PVMG(0x9b3bfc) at 0x9ba5ec REFCNT = 2 FLAGS = (GMG,SMG,pNOK,pPOK) IV = 666 NV = 2 PV = 0x3ffee4 "No such file or directory"\0 CUR = 25 LEN = 28 MAGIC = 0x9d904c MG_VIRTUAL = &PL_vtbl_sv MG_TYPE = PERL_MAGIC_sv(\0) MG_OBJ = 0x9ba61c MG_LEN = 1 MG_PTR = 0x9da014 "!"
      Negating positive numbers isn't doing something funny.
Re^3: Different behaviour of 'stat' function after assignment to $! (errno).
by Anonymous Monk on May 24, 2011 at 11:54 UTC
    The battle of IV versus NV, lol
    $ perl -MDevel::Peek -e " Dump($!); $!=20; stat 1; printf qq[%d %s %d\ +n], $!,$!,-$!; Dump($!); " SV = PVMG(0x9b3adc) at 0x9ba5ac REFCNT = 1 FLAGS = (GMG,SMG) IV = 0 NV = 0 PV = 0 MAGIC = 0x9c6d9c MG_VIRTUAL = &PL_vtbl_sv MG_TYPE = PERL_MAGIC_sv(\0) MG_OBJ = 0x9ba59c MG_LEN = 1 MG_PTR = 0x9c2b7c "!" 2 No such file or directory -20 SV = PVMG(0x9b3adc) at 0x9ba5ac REFCNT = 1 FLAGS = (GMG,SMG,pNOK,pPOK) IV = 20 NV = 2 PV = 0x3ffed4 "No such file or directory"\0 CUR = 25 LEN = 28 MAGIC = 0x9c6d9c MG_VIRTUAL = &PL_vtbl_sv MG_TYPE = PERL_MAGIC_sv(\0) MG_OBJ = 0x9ba59c MG_LEN = 1 MG_PTR = 0x9c2b7c "!"

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://906473]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (3)
As of 2014-09-22 00:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (176 votes), past polls