While there are certanly many situations where you might want to have a list of a block's variables declared near the top, there are just as many (if not more) cases where clarity is improved by declaring them as you need them, and no sooner.
Whenever it makes sense, I like to work it out to where lexical variables have the smallest scope possible, for the briefest amount of code.
For example:
sub myfunc {
my( $this, $that, @those ) = @_; # Here it may make sense to pull
# in the contents early on for
# simplicity and clarity's sake.
# Code here....
# more code here....
foreach my $alias ( @those ) { # Note we declare $alias only
# where it's needed.
# Do some stuff here.
# Do more stuff...
my $another = $alias * 5; # $another is limited to the sco
+pe
# of the foreach loop.
$this += $another;
}
while ( my $choice = shift @those ) { # Another tightly scoped var
+.
# Do something else.
}
return $this
}
This is contrived, but the idea is that I'm keeping scopes narrow, and declaring variables only where they're needed. To me, this helps to keep the declaration near where the variable is actually used, and that, in my opinion, improves readability and maintainability.
|