http://qs321.pair.com?node_id=11114048


in reply to 302 Found Location Message

Walter_T:   To expand on the first point made by haukex, re-declaring a global (e.g., our) variable isn't just unnecessary, it's completely useless. The only thing it will do is to generate a warning message if warnings are enabled – which, IMHO, they should always be.

c:\@Work\Perl\monks>perl -le "use strict; use warnings; ;; our $x = 'x before loop'; print qq{before loop: '$x'}; ;; for my $i (1 .. 2) { our $x = 'x in loop'; print qq{in loop: iteration $i: '$x'}; } ;; print qq{after loop: '$x'}; " "our" variable $x redeclared at -e line 1. (Did you mean "local" instead of "our"?) before loop: 'x before loop' in loop: iteration 1: 'x in loop' in loop: iteration 2: 'x in loop' after loop: 'x in loop'

As the warning message suggests, you may have been thinking of local, which will actually do something in this situation.

c:\@Work\Perl\monks>perl -le "use strict; use warnings; ;; our $x = 'x before loop'; print qq{before loop: '$x'}; ;; for my $i (1 .. 2) { local $x = 'x in loop'; print qq{in loop: iteration $i: '$x'}; } ;; print qq{after loop: '$x'}; " before loop: 'x before loop' in loop: iteration 1: 'x in loop' in loop: iteration 2: 'x in loop' after loop: 'x before loop'
But even when used in this way, globals should, I believe, be avoided. In general, use globals only for good, well-understood reasons.


Give a man a fish:  <%-{-{-{-<