Put custom field objects into a hash

I’m creating an object comprised of a customfield using my $customfield =
$ticket->FirstCustomFieldValue(‘CustomField’);

What I would like to do is iterate through the contents of that object and place
each one in a hash initializing its value to 0. I’ve tried to set the object
reference to a hash and then iterate through it setting the value to 0 but later
on, I try to use the hash and it gives me an error telling me “Can’t use string
(“0”) as a HASH ref while “strict refs” in use at ./user_timesheet_3.pl line 62.”

This is my script:

#!/usr/bin/perl

use warnings;
use strict;
use lib ‘/usr/local/rt-3.6.3/lib’;
use lib ‘/usr/local/rt-3.6.3/local/lib’;
use RT;
use RT::Tickets;
use RT::Users;

RT::LoadConfig();
RT::Init();

Declare our global variables

my (@days, @months, @years, @date);
my $time = time();

for (1 … 7) {
$time -= 246060;
@date = (localtime($time))[3 … 5];
push @days, (sprintf ‘%02d’, $date[0]);
push @months,(sprintf ‘%02d’,$date[1] + 1);
push @years, $date[2] + 1900;
}
my $endDate = join “-”, $years[0], $months[0], $days[0];
my $startDate = join “-”, $years[$#years], $months[$#months], $years[$#years];

my $tix = new RT::Tickets(RT::SystemUser);
$tix->FromSQL(‘Queue = “CustomerCare” AND Status = “open” AND Created <
“2007-03-03”’);
#$tix->FromSQL(‘Queue = “CustomerCare” AND (Status = “resolved” OR Status =
“open”) AND (LastUpdated >="’ . $startDate . ‘" AND LastUpdated < "’ .
$endDate. ‘")’);

my @environment;
my %environment;
my %timeworked;
my $users = new RT::Users(RT::SystemUser);
$users->LimitToPrivileged;

while (my $ticket = $tix->Next) {
my $environment = $ticket->FirstCustomFieldValue(‘Environment’);
my $user;
my $transaction;
%environment = ${environment};
unless ($environment) {
warn “warning” . $ticket->id. “no environment”;
next
}

    foreach my $key (keys %environment) {
            print $key . "\n";
    }

    my $transactions = $ticket->Transactions;
   foreach my $enviro (keys %environment) {
           while ($transaction = $transactions->Next) {
                   next unless (($transaction->TimeTaken) && ($enviro ==

$ticket->FirstCustomFieldValue(‘Environment’))) ;
print "Working on " . $ticket . " for " . $enviro . “\n”;
$timeworked{$transaction->Creator} +=
$transaction->TimeTaken;
}
}

   foreach my $user (keys %timeworked) {
           foreach my $cust (keys %environment) {
                   $environment{$cust}{$user} = $timeworked{$user};
           }
   }

}

foreach my $user (sort $users->Next) {
print “\n” . $user . “\n”;
print “--------------------\n”;
foreach my $env (sort keys %environment) {
print $env . " -> " . $environment{$env}{$user} . “\n”;
}
}

The error is occurring at the end where the print $env . " -> " .
$environment{$env}{$user} . “\n”; line is.

Can anyone help me by explaining how to populate a hash using each custom field
object as a key?

Mathew