You could try adding the following right at the top of your script. (Even add it before use strict - before everything else except perhaps the #! line.)
BEGIN {
package Tie::Env::Warn;
use Carp qw(cluck);
use Tie::Hash;
our @ISA = 'Tie::StdHash';
sub STORE {
my ($self, $key, $value) = @_;
cluck "Modification of \$ENV{$key}!";
$self->SUPER::STORE($key, $value);
}
tie %ENV, __PACKAGE__;
};
That will print out a warning including a stack trace (which shows line numbers, etc) whenever %ENV values are assigned. If that doesn't help, then you could also try hooking the DELETE and CLEAR methods (the example above just hooks STORE).
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
|