in reply to Scoping problems in nested loops

Hi mdunnbass,

First of all, before you do anything else, put the following 2 lines at the top of your program:

use strict; use warnings;

Now run your program, and get the output:

Global symbol "@fastarray" requires explicit package name at x line 5. Global symbol "$setscounter" requires explicit package name at x line +6. Global symbol "%matches" requires explicit package name at x line 7. Global symbol "@fastarray" requires explicit package name at x line 7. Global symbol "$site" requires explicit package name at x line 8. Global symbol "%matches" requires explicit package name at x line 8. Global symbol "@fastarray" requires explicit package name at x line 8. Global symbol "%matches" requires explicit package name at x line 9. Global symbol "@fastarray" requires explicit package name at x line 9. Global symbol "$site" requires explicit package name at x line 9. Global symbol "$i" requires explicit package name at x line 10. Global symbol "$i" requires explicit package name at x line 11. Global symbol "%matches" requires explicit package name at x line 11. Global symbol "@fastarray" requires explicit package name at x line 11 +. Global symbol "$site" requires explicit package name at x line 11. Global symbol "$lowerlimit" requires explicit package name at x line 1 +2. Global symbol "%matches" requires explicit package name at x line 13. Global symbol "@fastarray" requires explicit package name at x line 13 +. Global symbol "$site" requires explicit package name at x line 13. # ... etc. ...

Now go and fix those problems; declare each symbol in the outermost scope that they are needed.  For example:

my @fastarray; my @fastarray; my $setscounter; my %matches; my $site; my %sets; + FASTA: for (my $h=0;$h<(@fastarray);$h++) {

You shouldn't ever have to declare the same variable twice (otherwise, it's like using a whole different variable).

That should give you some clues about where your problem is.

Update:  added more my declarations at the outer-most scope; the other variables can all be declared where they are first used (eg. my $upperlimit = my $span + $lowerlimit;).

s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/

Replies are listed 'Best First'.
Re^2: Scoping problems in nested loops
by mdunnbass (Monk) on Nov 14, 2006 at 20:39 UTC
    Hi. I guess I should have mentioned this in my original post. The section of code that I pasted in here is actually a subset of a subroutine of a much larger program. I am using use strict and use warnings.

    The code itself functions and does not give any warnings (even when I run perl -w). It's just that it's not running the way I want it to.

    I know I should probably run it through perl -d, but considering how far down the pipe in the program this section actually occurs, It'd take me 20 minutes just to get to this point.

    Thanks though, for the thought.
    Matt