I have a script which places data 4 levels deep in a HoHoHoH. It grabs tickets in our ticket system using the systems API and places attributes about each piece of activity into the hash. The has is called %tickets. It looks like
$tickets{action_creator}{ticket_customer}{ticket_number}{ticket_subject}. Each is self explanatory with the value under ticket_subject being the total time the action creator spent on the whole ticket. The actual code # gather up all of the tickets, transactions, and time for each user and successively place # all data into a HoHoH working down from user to environment to ticket # we go through each date in the range individually so we can make sure we only get the transactions that # have been added during the date range foreach my $date (@searchDate) { while (my $ticket = $tix->Next) { $tikSubj{$ticket->id} = $ticket->Subject; my $env = $ticket->FirstCustomFieldValue('Environment'); my $transactions = $ticket->Transactions; while (my $transaction = $transactions->Next) { my $creator = $transaction->CreatorObj; # we need to make sure the transaction is in the date range requested # it's set up like this so we can chop the timestamp off of the Created string (my $checkDate = $transaction->Created) =~ s/\s.*$//; # we only want transactions that are within the date range, have TimeWorked # set, and the creator of which is one of the actual users and not someone # that was created upon ticket submission or Cc addition next unless (($checkDate eq $date) && ($creator->Privileged) && ($transaction->TimeTaken)); # if all of the above stipulations are met add the time worked to the hash $tickets{$creator->Name}{$env}{$ticket->id}{$ticket->Subject} += $transaction->TimeTaken; } } } And the formatting foreach my $user (keys %tickets) { open TIMESHEET, ">/work_reports/ticketlists/ticketlists_$endDate/ticketlist_$user" . "_" . "$endDate.txt" or die "Can't open file: $!"; print TIMESHEET "List of tickets worked on by $user during week ending $endDate", "\n\n"; foreach my $env (sort keys %{ $tickets{$user} }){ format TIMESHEET_TOP = @<<<<<<<<<<<<<<<<<<<< $env Ticket ID Subject hh:mm ------------------------------------------------------------------ . write TIMESHEET_TOP; foreach my $id (sort keys %{ $tickets{$user}{$env} }) { foreach my $subject (keys %{ $tickets{$user}{$env}{$id} }) { format TIMESHEET = @######### ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>> $id, $tickets{$user}{$env}{$id}, $tickets{$user}{$env}{$id}{$subject} ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $tickets{$user}{$env}{$id} . write TIMESHEET; } print TIMESHEET "\n"; } } } The problem didn't surface until I went from using the %tikSubj hash seen near the top of the code snippet to a multi-level hash. But then, using %tikSubj presents its own bug for some reason. Knowing that you don't know the intricacies of the system I'm working with, I won't be sad if no one has any input ;). Thanks Mathew -- Keep up with me and what I'm up to: http://theillien.blogspot.com -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/