while (@lines) { $line = shift(@lines); ($time, $id, $code) = parse($line); $hash{$id}{want} ||= 'open'; next unless ($hash{$id}{want} eq $code); if ($code eq 'open') { $hash{$id}{open} = $time; $hash{$id}{want} = 'hold'; } else { $hash{$id}{total} += $time - $hash{$id}{open}; $hash{$id}{want} = 'open'; delete $hash{$id}{open}; } }