in reply to accessing hash

I had to indent your code before I was able to read it. Then I simplified it a bit, so that I could execute it (I needed a substitute for your data file):

#!/usr/bin/perl use warnings; $putword=0; $q63=7; &getfile("query63.txt"); sub getfile { @data=(1); for($i=0; $i<=$#data;$i++){ $index=$i; @words=split(/\s+/,$data[$index]); if(3==2) { if (1 != 0){ } } else { @words = split(/\s+/,$data[$index]); %query=(2 =>{ctf=>5, df=>5, 1=>{doclen =>42, tf =>5, } }, ); #When I write here,I can get value..here inside the loop + print "inside ",$query{2}{1}{doclen},"\n"; } } #when I write here,I got nothing,,this is outside of loop.. print "outside ", $query{2}{1}{doclen},"\n"; } # prints: #inside 42 #outside 42

The output was as expected quite sensible. So if you don't get anything outside the loop, your loop probably deleted or overwrote again the data it printed inside the loop

Very good advice from toolic, especially Data::Dumper should help you greatly in finding the problem.

Replies are listed 'Best First'.
Re^2: accessing hash
by sierpinski (Chaplain) on May 28, 2010 at 16:40 UTC
    especially Data::Dumper should help you greatly in finding the problem

    In my opinion, Data::Dumper is the end-all-be-all solution to the 'my-data-isn't-what-I-expected' problem. It can help you to solve all sorts of riddles, from a malformed hash, to using a variable out of scope and not being able to figure out why it's always null.

    As mentioned above, definitely use strict and warnings. The perl interpreter is usually very good at detecting when you've done something that you didn't want to, at least when it comes to misusing assignments, scope violations, etc., but you'll never see those messages without those directives.
    A reply falls below the community's threshold of quality. You may see it by logging in.