in reply to Re^10: Hash of Arrays or Arrays of arrays? and how proceed?
in thread Hash of Arrays or Arrays of arrays? and how proceed?

What do you mean with "it still doesn't work?". Does it still print the last assigned values or something else?

One thing I'm very sure, you need the "my" before "@fields" in the sub, otherwise it will never work. That doesn't mean this was the only bug

What does Dumper tell you directly after returning from the subroutine, i.e. what do you get when you write

my $xyz= SubAcquisisciDatiCampiEsistenti( ...) #somewhere in your scr +ipt you have a line like this where you call the subroutine print Dumper($xyz); #<----- add this, but use the variable name you +are using

You should see the complete data in all its details. Does it seem correct? If not, there must be still a bug in the subroutine or how it is called. If all is correct, the bug must be somewhere later

Now move the Dumper(...) line further and further down your script to check how $xyz looks like in later stages of your script. If you extract data to other variables who later exhibit the problem, check them out with Dumper too. Follow the trail of your data ;-)

As soon as your data doesn't look correctly anymore you know exactly where the bug is, between the last correct place and this place.

My guess would be that you forgot to assign the return value of the subroutine to the right place or you are looking at the wrong variables. But you can check yourself, just use Dumper and never take anything for given, test every assumption you have.

Replies are listed 'Best First'.
Re^12: Hash of Arrays or Arrays of arrays? and how proceed?
by paride (Initiate) on Aug 10, 2011 at 09:20 UTC

    I was making a mountain out of a molehill! And I was trying to print the dumper outside the sub in the wrong way.... usyng "my" in the suggested place it's OK

    but I've one more question on the result obtained printing the dumper outside the sub

    in this environment I've two DB, same file but different fields, the result of the dumper outside is:

    my $risultato = SubAcquisisciDatiCampiEsistenti($file,@Databases); print "\n\n\n ################# Stampa dati FUORI SUBROUTINE ##### +##########\n\n\n"; print Dumper($risultato); my $i=0; foreach (@Databases) { print "\n"; print "Il primo campo disponibile del file $file sul Database +$_ e': "; print $risultato->{$_}{next}[$i]; print "\n"; $i+=1; }
    $VAR1 = { '6' => { 'next' => [ 'AQ', 'AO' ], 'fields' => [ 'AA,8,U,DE', 'AB,8,U,I', 'AC,14,U,I', 'AD,8,U,DE', 'AE,8,U,DE', 'AF,8,A,DE', 'AG,8,U,DE', 'AH,7,U,I', 'AI,8,U,DE', 'AJ,7,U,I', 'AK,5,A,DE', 'AL,10,A,I', 'AM,2,A,DE', 'AN,14,U,I' ] }, '5' => { 'next' => $VAR1->{'6'}{'next'}, 'fields' => [ 'AA,8,U,DE', 'AB,8,U,I', 'AC,14,U,I', 'AD,8,U,DE', 'AE,8,U,DE', 'AF,8,A,DE', 'AG,8,U,DE', 'AH,7,U,I', 'AI,8,U,DE', 'AJ,7,U,I', 'AK,5,A,DE', 'AL,10,A,I', 'AM,2,A,DE', 'AN,20,U,I', 'AO,20,A,DE,NU', 'AP,10,U,MU' ] } };

    Question: Is it correct the line "'next' => $VAR1->{'6'}{'next'}" ? If I got it right, this line is a reference to a reference? And it correctly point to "AQ"?

      You are right, this is a reference to the same hash as above, i.e. this is not correct. @nextfield has the same problem as @field had, i.e. it is a global variable, not a new one every time. So every next hash entry points to the same hash. Solution:

      Add "my @nextfield;" in the subroutine near the location where "my @field= sort(..." is.

        PERFECT! Now the dumper print:

        ################# Stampa dati FUORI SUBROUTINE ############### $VAR1 = { '6' => { 'next' => [ 'AO' ], 'fields' => [ 'AA,8,U,DE', 'AB,8,U,I', 'AC,14,U,I', 'AD,8,U,DE', 'AE,8,U,DE', 'AF,8,A,DE', 'AG,8,U,DE', 'AH,7,U,I', 'AI,8,U,DE', 'AJ,7,U,I', 'AK,5,A,DE', 'AL,10,A,I', 'AM,2,A,DE', 'AN,14,U,I' ] }, '5' => { 'next' => [ 'AQ' ], 'fields' => [ 'AA,8,U,DE', 'AB,8,U,I', 'AC,14,U,I', 'AD,8,U,DE', 'AE,8,U,DE', 'AF,8,A,DE', 'AG,8,U,DE', 'AH,7,U,I', 'AI,8,U,DE', 'AJ,7,U,I', 'AK,5,A,DE', 'AL,10,A,I', 'AM,2,A,DE', 'AN,20,U,I', 'AO,20,A,DE,NU', 'AP,10,U,MU' ] } }; Il primo campo disponibile del file 905 sul Database 5 e': AQ Il primo campo disponibile del file 905 sul Database 6 e': AO