in reply to Check for variable without leaving a trace

I don't know if you want this to happen or not but it looks like your test detects variables not yet declared:
BEGIN{print "BEGIN:",grep { $_ eq chaos}keys %::;print"\n"} INIT{print "INIT:",grep { $_ eq chaos}keys %::;print"\n"} END{print "END:",grep { $_ eq chaos}keys %::;print"\n"} print exists $::{"chaos"} && *{"::chaos"}{SCALAR},"\n"; $chaos = 1;
prints:
BEGIN: INIT:chaos SCALAR(0xe566e8) END:chaos