in reply to debugger watchpoint behavior

What I've had to do in such cases is to set a breakpoint with the condition.

e.g. if I have
%hash=(1,2,3,4); while (1) { print "Something...\n"; ===cut=== }

you can put in b 3 $hash{1} ne 2
In a real scenario you may need to run to after %hash is populated to find out what the value is