use strict;
use warnings;
use Tie::Handle::CSV;
my $log_file = Tie::Handle::CSV->new('userlog', header => 1);
my %last_contact;
while (my $log_entry = <$log_file>)
{
my $userA = $log_entry->{'userA'};
my $userB = $log_entry->{'userB'};
my $start = $log_entry->{'start-time'};
my ($h,$m,$s) = split /:/, $start;
$start = $h * 3600 + $m * 60 + $s;
my $end = $log_entry->{'start-time'};
my ($h,$m,$s) = split /:/, $end;
$end = $h * 3600 + $m * 60 + $s
if ( ($last_contact{ $last_contact->{user}->{$userA} } eq $userA)
&& defined $last_contact{ $userA }->{'finish'}
&& ($last_contact{ $userA }->{'finish'} - $start < 75))
{
print "Users $userA and $userB have consecutive sessions in less than 75 seconds\n";
}
else
{
$last_contact{$userA}->{'user'} = $userB;
$last_contact{$userA}->{'finish'} = $end;
$last_contact{$userB}->{'user'} = $userA;
$last_contact{$userB}->{'finish'} = $end;
}
}
所以,我會使用一個散列,其鍵是用戶,其值是他們的最後一次聯繫。如果用戶的最後一個聯繫人被用作密鑰並且指向第一個用戶,那麼他們是他們的最後一個聯繫人,並且你採取了一些行動(這裏我只是打印出這個事實)。否則,請兩個用戶並將他們的最後聯繫人設置爲彼此。
編輯追蹤時間,並確保它不到75秒。