Both of them are bad. Both "passing around" and "global variables" are a signs of a misdesign.
If you have a value that must be shared, make it a "regional" variable, accessible to a few subroutines that deal with it, and in turn provide a higher-level interface that don't need to expose that variable. For example, if you're talking about something like a database handle, create a module that does all the DB stuff, and then you can initialize (perhaps lazily) the database handle there. Thus, the rest of the program does not have access to the database handle, but you still don't have to pass it around a lot.