NAME
Set::Groups - A set of groups.
SYNOPSIS
use Set::Groups ;
# create a set of groups
$groups = new Set::Groups ;
# create a group MyGroup with a single member
$groups->addSingleTo("single1","MyGroup") ;
# add 2 singles members into MyGroup
$groups->addSinglesTo(["single2","single3"],"MyGroup") ;
# add a group member into MyGroup
$groups->addGroupTo("Member1Group","MyGroup") ;
# add 2 group members into MyGroup
$groups->addGroupsTo(["Member2Group","Member3Group"],"MyGroup") ;
# add a single members into the previous member groups
$groups->addSingleTo("single4","Member1Group") ;
$groups->addSingleTo("single5","Member2Group") ;
$groups->addSingleTo("single6","Member3Group") ;
# flatten the group MyGroup
@singles = $groups->getSinglesOf("MyGroup") ;
$present = $groups->isSingleOf("single4","MyGroup") ;
DESCRIPTION
The Groups object implements a set of groups. Each group can own single members and group members. A group can be flattened, i.e. expansed until each of his members is a single one.
CONSTRUCTORS
new
Create a new group set.
my $groups = new Set::Groups
INSTANCE METHODS
Set management
newGroup
Create a new empty group and add it in the set. A group is everything which can be a key of a hash. NewGroup returns 0 if this group already exists, 1 otherwise.
$groups->newGroup("a_group") ;
$groups->newGroup(1) ;
deleteGroup
Delete a group from the set. Return 1 on success, 0 oterhwise.
$groups->deleteGroup("a_group") ;
getGroups
Return the list of the groups present into the set.
@groups = $groups->getGroups() ;
hasGroup
Check if a group is present into the set.
$present = $groups->hasGroup("a_group") ;
Groups management
addSingleTo
Add a single member to a group. A single is everything which can be a key of a hash. If the group doesn't exist in the set, it is created.
$groups->addSingleTo("single","a_group") ;
addSinglesTo
Add a list of single members to a group. If the group doesn't exist in the set, it is created.
$groups->addSinglesTo(["single1","single2"],"a_group") ;
addGroupTo
Add a group member to a group. If the embedding group doesn't exist in the set, it is created. If the member group doesn't exist in the set, it is created as an empty group.
$groups->addGroupTo("group_member","a_group") ;
addGroupsTo
Add a list of group members to a group. If the embedding group doesn't exist in the set, it is created. If the member group doesn't exist in the set, it is created as an empty group.
$groups->addGroupsTo(["group_member1","group_member2"],"a_group") ;
isOwnSingleOf
Check if a single is a own member of a group.
$present = $groups->isOwnSingleOf("single","a_group") ;
isGroupOf
Check if a group is member of a group.
$present = $groups->isGroupOf("a_group_member","a_group") ;
isSingleOf
Check if a single is a (own or not) member of a group.
$present = $groups->isSingleOf("single","a_group") ;
getOwnSinglesOf
Return the list of own singles of a group.
@singles = $groups->getOwnSinglesOf("a_group") ;
getGroupsOf
Return the list of groups of a group.
@groups = $groups->getGroupsOf("a_group") ;
getSinglesOf
Return the list of (own or not) singles of a group.
@singles = $groups->getSinglesOf("a_group") ;
removeSingleFrom
Remove a single from a group. Return 1 on success, 0 otherwise.
$groups->removeSingleFrom("single","a_group") ;
removeGroupFrom
Remove a group member from a group. Return 1 on success, 0 otherwise.
$groups->removeGroupFrom("a_member_group","a_group") ;
EXAMPLES
Suppose a group file like :
admin:root,adm
system:@admin,operator
team:piotr,lioudmila,adam,annette,jacquelin
true-users:james,sophie,@team,mohammed
everybody:@system,@true-users
daemon:apache,smmsp,named,daemon
virtual:nobody,halt,@daemon
all:@everybody,@virtual
where @name
means group named name, then the following code :
use Set::Groups ;
my $groups = new Set::Groups ;
while(<F>)
{
($group,$members) = /^(\S+):(.*)$/ ;
@members = split(/,/,$members) ;
for $member (@members)
{
if ($member=~/^@/)
{
$member=~s/^@// ;
$groups->addGroupTo($member,$group) ;
}
else
{
$groups->addSingleTo($member,$group) ;
}
}
}
print join(', ',$groups->getSinglesOf("all")) ;
gives : apache, sophie, jacquelin, lioudmila, mohammed, smmsp, nobody, adm, annette, operator, james, named, adam, halt, root, daemon, piotr
AUTHOR
Jacquelin Charbonnel, <jacquelin.charbonnel at math.cnrs.fr>
BUGS
Please report any bugs or feature requests to bug-dir-which at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Dir-Which. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Dir::Which
You can also look for information at:
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
RT: CPAN's request tracker
Search CPAN
ACKNOWLEDGEMENTS
Dir::Which
is inspired by File::SearchPath
written by Tim Jenness. Thanks to Tim for allowing me to reuse his idea.
COPYRIGHT & LICENSE
Copyright Jacquelin Charbonnel <jacquelin.charbonnel at math.cnrs.fr>
This software is governed by the CeCILL-C license under French law and abiding by the rules of distribution of free software. You can use, modify and/ or redistribute the software under the terms of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following URL "http://www.cecill.info".
As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors have only limited liability.
In this respect, the user's attention is drawn to the risks associated with loading, using, modifying and/or developing or reproducing the software by the user in light of its specific status of free software, that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the software's suitability as regards their requirements in conditions enabling the security of their systems and/or data to be ensured and, more generally, to use and operate it in the same conditions as regards security.
The fact that you are presently reading this means that you have had knowledge of the CeCILL-C license and that you accept its terms.