On Tue, Nov 8, 2011 at 11:20 AM, Paul Rousseau <paulrousseau...@hotmail.com>wrote:
> Here is the Dumper output when I use the code, > > push @{$project{$projectno}}, \%days; > Right, so $project{$projectno} is an ARRAYREF, and each entry pushed in this way will be a HASHREF. Note that other entries may exist in your array before this loop, such as 'SCADA...' and 14 and 3 as shown below. These are all valid: print $project{$projectno}[0]; # SCADA... print $project{$projectno}[1]; # 14 print $project{$projectno}[2]; # 3 print $project{$projectno}[3]{'6'}[0]; # 4.00 print $project{$projectno}[4]{'3'}[0]; # 6.00 etc. $VAR1 = { > '2011-0101' => [ > # the first three here are throwing you off your game: > 'SCADA Host Re-evaluation Project', > 14, > 3, > { > '6' => [ > '4.00', > '' > ], > '3' => [ > '6.00', > '' > ], > '5' => [ > '4.00', > '' > ] > } > ] > }; > > > When I execute the line, > > print Dumper \%{$project{$projectno}[2]}; > > I still get the error, > > > Can't use string ("3") as a HASH ref while "strict refs" in use at > c:\images\mactimesheet.pl line 40 > 1, <STDIN> line 1. > > I will continue to experiment with the semantics. I believe I am close. > > Paul > > > > > > > Date: Tue, 8 Nov 2011 02:26:17 +0200 > > Subject: Re: How to push a hash on to a hash of array entries > > From: szab...@gmail.com > > To: paulrousseau...@hotmail.com > > CC: perl-win32-users@listserv.activestate.com > > > > > Hi Paul, > > > > there are a couple of issues I could see in the code you sent, > > let me point out some of them and hope those will help. > > > > In general I'd recommend using the Dumper function of Data::Dumper > > to check what kind of data structure you got. > > > > > > > > On Tue, Nov 8, 2011 at 1:41 AM, Paul Rousseau > > <paulrousseau...@hotmail.com> wrote: > > > Hello Perl Community, > > > > > > I want to build a complex hash. > > > > > > I want my hash structure to look like this: > > > > > > # %project = (<projectno1> => [<projdesc1>, > > > # <hourtotal1>, > > > # %days1 = (<day x> => > > > [<hours>,<desc>], > > > # <day > y> => > > > [<hours>, <desc>] > > > # ) > > > # ], > > > # <projdesc2>, > > > # <hourtotal2>, > > > # %days2 = (<day x> => > > > [<hours>,<desc>], > > > # <day > y> => > > > [<hours>, <desc>] > > > # ) > > > # ] > > > # ) > > > > > > I am having trouble building up and populating the individual %days > hash. > > > > > > Here is what I have so far. > > > > > > use strict; > > > > I'd recommend adding "use warnings;" as well. > > > > > > > > my ( > > > %project, > > > $projectno, $desc, > > > $day, > > > %days, > > > $i > > > ); > > > > > > $projectno = "12345"; > > > "$desc = "testing first project"; > > > > > > $project{$projectno} = [$desc, "0"]; # zero hours > > > > > > #later on, my code reads in some records such as > > > > > > # 3, 12, "painted a room" > > > # 5, 6, "added a chair" > > > # 14, 2, "made some calls" > > > > > > # for, say, project "12345" > > > > > > For my first test, I populated a smaller hash called %days. > > > > > > for ($i = 1; $i <=3; $i++) > > > { > > > ($day, $hour, $text) = split (',', <inline>); > > > $days{$day} = ($hour, $text); > > > } > > > > > > > If I am not mistaken you want to pass an array reference there > > and not an array so need square brackets: > > > > $days{$day} = [$hour, $text]; > > > > Try this: > > use Data::Dumper qw(Dumper); > > print Dumper \%days; > > > > > > > > > # > > > # now that I have finished populating a smaller hash, I want to copy > the > > > hash on to the bigger hash. > > > # > > > > > > push @{$project{$projectno}}, %days; > > > > In this case perl will flatten the hash and you will push all the keys > > and values of it to the array. > > Try printing out the result with the Dumper. > > > > I am almost sure you will want to write: > > > > push @{$project{$projectno}}, \%days; > > > > See the back-slash in-front of the hash. > > > > > > regards > > Gabor > > > > -- > > Gabor Szabo > > Perl Tutorial: http://szabgab.com/perl_tutorial.html > > Perl Weekly: http://perlweekly.com/ > > _______________________________________________ > Perl-Win32-Users mailing list > Perl-Win32-Users@listserv.ActiveState.com > To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs > > -- "The very nucleus of Character: to do what you know you should do, when you don't want to do it." Stephen Covey
_______________________________________________ Perl-Win32-Users mailing list Perl-Win32-Users@listserv.ActiveState.com To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs