On Thu, Jul 03, 2003 at 05:51:00AM +0100, Pense, Joachim wrote:
>
> [ { my $staticvar; sub mysub {...} } versus sub mysub {static
> $staticvar;} ]
>
> Abigail and others point that the first version is more flexible than the
> second one, which is true. Reason: the first construct allows subs to share
> the statics. On the other hand, there is a psychological advantage to the
> second version, which would let me prefere it where possible if there was a
> "static" construct:
>
> I think is contra-intuitive for many programmers anyway: I am trained to
> consider everything within curly braces as invisible from the outside. So it
> becomes less clear in the first version that mysub is in fact global to the
> program.
I think your training is to fault. Consider that files are a lexical
scope as well, as if their were braces. Were subs not visible outside
of a scope, we wouldn't have modules and objects as we have them now.
> Is there a sensible way of combining the advantages, that is: defining subs
> outside of blocks that share static variables anyway? Whatever I can think
> of would be even worse than version one (more complicated, less intuitive,
> more error-prone), so has anyone else thought of a concept?
You could always use a package variable - but those would be visible
to other subs as well. But since you don't want to group subs in a
scope anyway...
Abigail