I would say make an inner package, called STATIC, that
holds all static variables. Then use a renames clause
in each subprogram of the outer package to get a direct
simple name visibility.
Example:
Package body Bar is
Package Static is
Foo_V : integer; -- that way we can have other V's
...
End Static;
...
Function Foo return Integer is
V : Integer renames Static.Foo_V;
Begin
V := Init_Static;
...
End Foo;
End Bar;
The only disadvantage I see is that you have to
change the type name in two places (Static, Foo)
if it ever needs to change.