in reply to Stupid question

How about making it all explicit, put $foo in its own package, and just be judicious in your use of the full name of $foo.

#!/usr/bin/perl -w use strict; package Foo; use vars qw/$foo/; $foo = "bar"; package main; # always use $Foo::foo from here on down

Or you could exploit the fact that my variables scope, while it stretches across packages declared in the same file, does not reach outside of the *file* in which they are declared. I.e. if in foo.pl you declare $foo with my, then that variable won't be visible inside subroutines declared in bar.pl

A little more souped-up kind of idea might be to define an *object* with accessor methods. Syntactically annoying (which I gather is what you're trying to avoid =), but IMO, conceptually quite clean.

final note: please, use a more descriptive title ... it might help others trying to solve the same problem =)

Philosophy can be made out of anything. Or less -- Jerry A. Fodor