Your print using: print "User ID = $hash{'$UserID'}\n"; will use $UserID, but there is no such thing.
In your sub, you are allowing only one value per assignment, ie your keys are UserID, AssignedTo, etc and there will be only one value. If you want multiple values, then will need to do concatentation, but if you are trying to keep this all together, this may or may not work. To see the values you have, use: foreach (keys %hash) { printf "%3d %20s\n",$hash{$_}, $_; # prints the hash value, hash Key } Wags ;) -----Original Message----- From: Tomasi, Chuck [mailto:[EMAIL PROTECTED]] Sent: Friday, November 16, 2001 07:29 To: '[EMAIL PROTECTED]' Subject: Populating a referenced hash Perl: 5.6.0 OS: Solaris 7 Goal: Scan a text file for key words/values and populate a hash My parsing works, but the main() never sees the values properly. If I'm passing by reference, why isn't the hash I passed getting populated in the main namespace? Thanks --Chuck ----------arg.pl--------------- #/usr/plx/bin/perl -w use strict; sub ref { my ($href, $aref) =@_; my (@leftovers); foreach (@$aref) { chomp; if (/^UserID\s+:\s+(\d+)/) { ${$href}{'UserID'} = $1; } elsif (/^SupportGroup\s+:\s+(\d+)/) { ${$href}{'SupportGroup'} = $1; } elsif (/^Assigned To\s+:\s+(\d+)/) { ${$href}{'AssignTo'} = $1; } elsif (/^DateOpened\s+:\s+(\d+)/) { ${$href}{'DateOpened'} = $1; } else { push(@leftovers, "$_\n"); } } return(@leftovers); } my @array; my @remains; my (%hash); open(F_TMP, "/tmp/tfile") || die("Cannot open text file"); @array = <F_TMP>; close(F_TMP); @remains = &ref(\%hash, \@array); print "User ID = $hash{'$UserID'}\n"; print "Remains = " . @remains . "\n"; -----------output------------ User ID = Remains = 2 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]