Detect incomplete caller overrides in Carp, and avoid using bogus @DB::args.
authorNicholas Clark <nick@ccl4.org>
Wed, 21 Jul 2010 19:17:47 +0000 (20:17 +0100)
committerNicholas Clark <nick@ccl4.org>
Wed, 21 Jul 2010 19:24:27 +0000 (20:24 +0100)
commiteff7e72c3d4dda827de2e7b972c08a37cbcf607e
tree21f52a66cd4dd87080280dc3fce2153aa667724c
parent8af6f9854c44f2d52182097da3cf09138646e6a2
Detect incomplete caller overrides in Carp, and avoid using bogus @DB::args.

To get arguments into its backtraces, Carp relies on caller setting @DB::args
when called from package DB. @DB::args isn't refcounted (and can't be). Not
all overriders of &CORE::GLOBAL::caller set @DB::args properly, with the result
that @DB::arg can become "stale", with strange errors, at a distance.

However, it is possible to detect that @DB::args has not been updated, and take
evasive action. This is preferable to presenting the user (or logfile) with
silently wrong backtraces, and much preferable to the occasional "Bizarre copy"
exception.
lib/Carp.pm
lib/Carp.t