Нет необходимости разбирать системные файлы, в UNIX-подобной операционной системе я бы использовал встроенные интерфейсы для системных вызовов getpwuid и getgrgid:
use strict;
use warnings;
# use $< for the real uid and $> for the effective uid
my ($user, $passwd, $uid, $gid ) = getpwuid $< ;
my $group = getgrgid $gid ;
printf "user: %s (%d), group: %s (%d)\n", $user, $uid, $group, $gid;
Что-то попроще, как
my $group = getgrgid $(
также будет работать, так как $ (и $) уже должны содержать GID и EGID.
Наконец, функция getgroups, определенная в модуле POSIX,
use POSIX qw(getgroups)
, как предлагает dsw, также должно позволять вам получать вторичные группы, если ваша ОС (в отличие, например, от Linux) поддерживает одновременное использование нескольких активных групп.
Поиск неактивных вторичных групп может действительно включать анализ файла / etc / group,
Прямо или через комбинированное использование встроенного в getgrend и стандартного модуля User :: grent.