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;
}
}
したがって、キーがユーザーで値が最後の連絡先であるハッシュを使用します。ユーザーの最後の連絡先がキーとして使用され、最初のユーザーを指す場合、それらは最後の連絡先であり、何らかのアクションを実行します (ここではその事実を出力します)。それ以外の場合は、2 人のユーザーを取り、最後の連絡先をお互いに設定します。
時間を追跡し、75 秒未満であることを確認するように編集しました。