in reply to associate that array with this hash?

The reason it's not working is because you're creating a reference to exactly the same variable each time (because @temp is global instead of lexical).

What you should do, is change @temp to be a lexical variable, scoped to the body of the while loop. That way, a new lexical variable will be created each time, and the reference that you stored away in the hash will keep all the old lexical variables alive (but anonymous). Like so:

open(PARMFILE, "< $parmfile") or die "unsuccessful open of input file $parmfile"; while (<PARMFILE>) { next if /^#/ || /^\s*$/; chomp; my @temp=split(/\s+/,$_); # Note the 'my' $dbparms{$temp[2]} = \@temp; } close PARMFILE; foreach $item (sort keys %dbparms) { print "$item => $dbparms{$item} \n"; }

And that should get the effect you want.

Update: I tested it, and it does work, although your print loop doesn't dereference the array-ref so you just get a bunch of lines like: '01 => ARRAY(0x1accdcc)'. Change the print loop to the following for a more useful output ;-)

foreach $item (sort keys %dbparms) { $" = ','; print "$item => @{$dbparms{$item}} \n"; }

bbfu
Seasons don't fear The Reaper.
Nor do the wind, the sun, and the rain.
We can be like they are.

Replies are listed 'Best First'.
Re: (bbfu) (reference to global variable) Re: associate that array with this hash?
by shaezi (Acolyte) on Sep 27, 2001 at 20:09 UTC
    still doesn't seem to work, the output looks like this
    01 => ARRAY(0x20038aa0) 02 => ARRAY(0x20038b30) 03 => ARRAY(0x20038b90)
    thanks

      See my update. Basically: the print is bad, the data is good.

      bbfu
      Seasons don't fear The Reaper.
      Nor do the wind, the sun, and the rain.
      We can be like they are.

        Thanks for all the help. All issues have been resolved :)