I ran into just about the exact same thing a couple weeks ago (in a FastCGI app, even) and dealt with it in a slightly more direct fashion:
our $foo_global = $foo;
$obj->method_that_needs_foo_but_takes_no_params;
undef $foo_global;
While either way of handling this works, I prefer the
undef solution for a case like mine where the global data is only needed for one specific call, as it lets me immediately clean it up after that need passes.
weaken is definitely the better solution in other cases, though, where you may not know as clearly when you'll be done with the global.