in reply to The Law of Inconsistent Assumptions

The previous example sends a spurious warning message because the former assumption breaks down ... incomplete assumptions about what constitutes a "single script".

Not quite correct. Lexical variables don't live in the symbol table, they have their own scratch pads. Thus:

my $foo;
and
$main::foo;
are two different variables, and hence the warning msg.