内容

名称

用户::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 模块来构建类似结构的类,但您不应该依赖于此。

作者

汤姆·克里斯蒂安森