Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^4: Stupid question (heisenbugs)

by runrig (Abbot)
on Apr 14, 2012 at 06:05 UTC ( #965040=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Stupid question (heisenbugs)
in thread Stupid question

The "bizarre copy" errors from Carp so far seem to only happen when one particular module wants to throw an error (unless I do something like this on purpose). When I apply this eval band aid, Carp reports the real error instead of the useless error that may never be fixed. The error has something to do with lack of ref counting of the stack. It would be nice if Carp were patched as in the RT ticket, as it restores Carp to being at least somewhat useful when this happens.


Comment on Re^4: Stupid question (heisenbugs)
Re^5: Stupid question (mortalization)
by tye (Cardinal) on Apr 14, 2012 at 15:46 UTC
    The error has something to do with lack of ref counting of the stack.

    Well, that is asserted in https://rt.perl.org/rt3/Public/Bug/Display.html?id=77706 but no justification or even discussion of that assertion is apparent or even linked from it and I find the assertion not credible. Items on the stack in Perl are still ref-counted, just somewhat differently. There may be a fundamental flaw in this difference but I have not heard it described and it is not apparent to me.

    If you run into some actual discussion or even a description that is not ridiculously vague, please point such out.

    - tye        

      Seems like there are just bugs related to altering function arguments, perhaps when they also refer to more global variables, and maybe especially @ARGV. E.g. (copied and modified from bizarre Carp - also I posted a patch in that thread):
      use Carp; Main(@ARGV); sub Main { my $first = shift @ARGV; $ARGV[0] = [qw(1 2 3)]; confess "Rubbish"; exit; }

      I get different results on different versions of perl (tested on 5.8.4, 5.8.8, and 5.14.1). And different results when I comment out the assignment to $ARGV[0].

      But passing @ARGV to Main() and then modifying @ARGV (and Getopt::* modules modify @ARGV by default -- so yes @_ should be copied and parsed instead) seems to be a bad thing (bad in that it triggers bugs in perl/Carp, not that you shouldn't be allowed to do it and perl should blow up).

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2014-08-23 21:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (178 votes), past polls