my %ttys= (); open( WHO, "who|" ) or die "Can't fork to read from who: $!"; while( ) { my( $user, $tty )= split; if( ! exists $ttys{$user} ) { $ttys{$user}= [$tty]; } else { push @{$ttys{$user}}, $tty; } } foreach my $user ( sort keys %ttys ) { print "$user: @{$ttys{$user}}\n"; }