On Tue, Sep 06, 2005 at 07:01:06PM -0700, Chris Heath wrote: > Throwing an exception inside a grep sometimes causes Perl > to emit an internal warning. > > $ perl -e 'for ("foo") { grep(die, "bar") }' > Died at -e line 1. > Attempt to free unreferenced scalar: SV 0x96c61dc, Perl interpreter: > 0x96ae008.
The unreferenced scalar seems to be "bar" as this will still generate an error $ perl -e 'grep {die} "bar" for undef' Died at -e line 1. Attempt to free unreferenced scalar: SV 0x800dd0. (undef has special reference counting semantics) Replacing grep with map produces the same error. > Does this warning indicate possible internal corruption? I have seen > some Perl corruption in a production system at my work recently, as well > as this warning, so I wondered if they could be related. Well, it's a double "free", in as much as one part of the interpreter has a pointer to a block of memory that will be recycled as a new scalar at some point. I'm not sure quite what route, or what manipulation of $@ could create actual corruption though. Nicholas Clark