根据这个网站我可以简单地写
$user = getlogin();
但是组处理函数似乎无法接受用户名/ userid作为参数.我是否应该遍历所有/ etc/group文件行并从中解析组名?
不需要解析系统文件,在类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.
最后是POSIX模块中定义的getgroups函数,
use POSIX qw(getgroups)
正如dsw所建议的那样,如果您的操作系统(例如Linux不同)支持同时拥有多个活动组,那么还应允许您获取辅助组.
查找非活动的辅助组可能确实涉及解析/ etc/group文件,直接或通过getgrend内置和标准User :: grent模块的组合使用.