my %users = map { $u => 0 } qw/ list of users to watch /; while (1) { my %curr = map { $_ => 1 } split / /, `users`; for (keys %users) { if ( $users{$_} != $curr{$_} ) { $users{$_} = $curr{$_}; printf "%s: $_ has logged %s\n", scalar localtime, ($users{$_} ? "in" : "out"); } } sleep 2; }