用户::grent - Perl 内置 getgr*() 函数的按名称接口
use User::grent;
my $gr = getgrgid(0) or die "No group zero";
if ( $gr->name eq 'wheel' && @{$gr->members} > 1 ) {
print "gid zero name wheel, with other members";
}
use User::grent qw(:FIELDS);
getgrgid(0) or die "No group zero";
if ( $gr_name eq 'wheel' && @gr_members > 1 ) {
print "gid zero name wheel, with other members";
}
my $gr = getgr($whoever);
此模块的默认导出覆盖了核心 getgrent()、getgrgid() 和 getgrnam() 函数,用返回“用户::grent”对象的版本替换它们。此对象具有返回来自 C 的 passwd 结构(来自 grp.h)的同名结构字段名称的方法;即 name、passwd、gid 和 members(不是 mem)。前三个返回标量,最后一个返回数组引用。
您还可以使用 :FIELDS 导入标签将所有结构字段直接导入到您的命名空间中作为常规变量。(请注意,这仍然会覆盖您的核心函数。)将这些字段作为以 gr_
开头的变量访问。因此,如果您导入字段,$group_obj->gid()
将对应于 $gr_gid。数组引用作为常规数组变量可用,因此 @{ $group_obj->members() }
将简单地是 @gr_members。
getgr() 函数是一个简单的前端,它将数字参数转发给 getgrgid(),将其他参数转发给 getgrnam()。
要访问此功能而不覆盖核心,请将 use
传递一个空的导入列表,然后使用其完全限定名称访问函数函数。另一方面,内置函数仍然可以通过 CORE::
伪包访问。
虽然此类目前使用 Class::Struct 模块来构建类似结构的类,但您不应该依赖于此。
汤姆·克里斯蒂安森