User::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() 函式,並以傳回「User::grent」物件的方式取代它們。此物件有方法可以傳回 C 的 grp.h 中 passwd 結構中類似名稱的結構欄位名稱;也就是 name、passwd、gid 和 members(而非 mem)。前三個會傳回純量,最後一個會傳回陣列參考。
您也可以使用 :FIELDS 匯入標籤,將所有結構欄位直接匯入您的命名空間中,作為一般變數。(請注意,這仍然會覆寫您的核心函式。)使用以 gr_
為字首命名的變數來存取這些欄位。因此,如果您匯入欄位,$group_obj->gid()
會對應到 $gr_gid。陣列參考可用作一般陣列變數,因此 @{ $group_obj->members() }
會變成單純的 @gr_members。
getgr() 函式是一個簡單的前端,會將數字引數轉送給 getgrgid(),並將其餘的轉送給 getgrnam()。
若要存取此功能而不覆寫核心,請傳遞一個空的匯入清單給 use
,然後使用其完整限定名稱存取函式。另一方面,內建函式仍可透過 CORE::
偽套件取得。
雖然此類別目前是使用 Class::Struct 模組來建構類結構類別,但您不應依賴此方式。
湯姆·克里斯蒂安森