Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
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
Replies are listed 'Best First'.
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 :)

      Negating positive numbers isn't doing 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 "!"
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 contemplating the Monastery: (6)
As of 2015-07-28 10:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (254 votes), past polls