*should had done 

is totally off (* means incorrect). 

In how many great writers' work have you found it? In how many grammars? Well?

should have done vs should had done (sequence of tenses)
i'm setting my hash in my function as

$hash{$loginId}{$month}=$hash{$loginId}{$month}+$time1;


and I can print the value in one spot as

print "$hash{maclawty796}{Sep}\n"; #just some name and date in the text file i imported


But I want to print out all the values. 
When i use

print "@{[%hash]}\n";


I get a bunch of weird results and what looks like memory addresses. How can i print out the loginId's Months and times?

Here's the full code if you need it

#
#  adapted from regex9.pl
#

$file ='timelog.txt';
open(INFO, $file) or die("Could not open  file.");


use strict;

my ($loginId, $month, $time1, $time2, $pts, $line, $time1T, $time2T);
my %hash=();


while  (&lt;INFO&gt;)
{
$line=$_;
#assignment of Login ID's
if( ($loginId) = /([a-y]*(\d|\w)*)/ ){
printf("%-15s", $loginId);
}

if( ($month) = /((Jan)|(Fed)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))/ ){
printf("%-5s", $month);
}

if(($time1, $time1T, $time2,$time2T)= /(\d\d):(\d\d)\s-\s(\d\d):(\d\d)/ ){
#print($time1, " ", $time1T, " ", $time2," ", $time2T,"\n"); #for testing
$time1=($time2*60+$time2T)-($time1*60+$time1T);
printf ("%-5s minutes\n" ,$time1);
}

$hash{$loginId}{$month}=$hash{$loginId}{$month}+$time1;
print "hash $hash{$loginId}{$month}\n";

}

print "@{[%hash]}\n";
print "$hash{maclawty796}{Sep}\n";

