Set::Groups - A set of groups.
use Set::Groups ; # create a set of groups $groups = new Set::Groups ; # create a group MyGroup with a single member $groups->addOwnSingleTo("single1","MyGroup") ; # add a group member into MyGroup $groups->addOwnGroupTo("Member1Group","MyGroup") ; # add a single members into the previous member group $groups->addOwnSingleTo("single2","Member1Group") ; # add a group member into the previous member group $groups->addOwnGroupTo("Member2Group","Member1Group") ; # add a single members into the previous member group $groups->addOwnSingleTo("single3","Member2Group") ; # flatten the group MyGroup @singles = $groups->getSinglesOf("MyGroup") ; @groups = $groups->getGroupsOf("MyGroup") ; $present = $groups->isSingleOf("single3","MyGroup") ; $present = $groups->isGroupOf("Member2Group","MyGroup") ;
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.
Create a new group set.
my $groups = new Set::Groups
Set a debug level (0 or 1).
$groups->setDebug(1) ;
Create a new empty group and add it into the set. A group is everything which can be a key of a hash. Returns 1 on success, 0 otherwise.
$groups->newGroup("a_group") ; $groups->newGroup(1) ;
Delete a group from the set. Return 1 on success, 0 otherwise.
$groups->deleteGroup("a_group") ;
Return the list of the groups present into the set.
@groups = $groups->getGroups() ;
Return the list of the cyclic groups (i.e. self-contained) present into the set.
Return the list of the acyclic groups (i.e. not self-contained) present into the set.
Check if a group is present into the set.
$present = $groups->hasGroup("a_group") ;
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. Return 1 on success, 0 otherwise.
$groups->addOwnSingleTo("single","a_group") ;
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. Return 1 on success, 0 otherwise.
$groups->addOwnGroupTo("group_member","a_group") ;
Remove an own single from a group. Return 1 on success, 0 otherwise.
$groups->removeOwnSingleFrom("single","a_group") ;
Remove a group member from a group. Return 1 on success, 0 otherwise.
$groups->removeOwnGroupFrom("a_member_group","a_group") ;
Check if a group is acyclic.
$is_acyclic = $groups->isAcyclic("a_group") ;
Check if a single is an own member of a group.
$present = $groups->isOwnSingleOf("single","a_group") ;
Check if a group is an own member of a group.
$present = $groups->isOwnGroupOf("a_group_member","a_group") ;
Check if a single is a (own or not) member of a group.
$present = $groups->isSingleOf("single","an_acyclic_group") ;
Warning - Calling this method with a cyclic group as argument gives a infinite recursion.
Check if a group is a (own or not) member of a group.
$present = $groups->isGroupOf("a_group_member","an_acyclic_group") ;
Return the list of own singles of a group.
@singles = $groups->getOwnSinglesOf("a_group") ;
Return the list of own groups of a group.
@groups = $groups->getOwnGroupsOf("a_group") ;
Return the list of (own or not) singles of an acyclic group.
@singles = $groups->getSinglesOf("an_acyclic_group") ;
Return the list of (own or not) groups of an acyclic group.
@groups = $groups->getGroupsOf("an_acyclic_group") ;
Deprecated - Replaced by addOwnGroupTo.
Deprecated - Replaced by addOwnSingleTo.
Deprecated - Replaced by removeOwnGroupFrom.
Deprecated - Replaced by removeOwnSingleFrom.
Suppose a group file like :
admin:root,adm team:piotr,lioudmila,adam,annette,jacquelin true-users:james,sophie,@team,mohammed everybody:@admin,operator,@true-users daemon:apache,smmsp,named,daemon virtual:nobody,halt,@daemon all:@everybody,@virtual
where @name means group name, then the following code :
@name
use Set::Groups ; $groups = new Set::Groups ; while(<>) { ($group,$members) = /^(\S+):(.*)$/ ; @members = split(/,/,$members) ; for $member (@members) { if ($member=~/^@/) { $member=~s/^@// ; $groups->addOwnGroupTo($member,$group) ; } else { $groups->addOwnSingleTo($member,$group) ; } } } die "some groups are cyclic" if scalar($groups->getCyclicGroups())>0 ; print "singles: ",join(', ',$groups->getSinglesOf("all")),"\n" ; print "groups: ",join(', ',$groups->getGroupsOf("all")),"\n" ;
gives :
singles: apache, sophie, jacquelin, lioudmila, mohammed, smmsp, nobody, adm, annette, operator, james, named, adam, halt, root, daemon, piotr groups: admin, everybody, team, daemon, true-users, virtual
Jacquelin Charbonnel, <jacquelin.charbonnel at math.cnrs.fr>
<jacquelin.charbonnel at math.cnrs.fr>
Please report any bugs or feature requests to bug-Set-Groups at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Set-Groups. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-Set-Groups at rt.cpan.org
You can find documentation for this module with the perldoc command.
perldoc Set-Groups
You can also look for information at:
AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/Set-Groups
CPAN Ratings
http://cpanratings.perl.org/s/Set-Groups
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Set-Groups
Search CPAN
http://search.cpan.org/dist/Set-Groups
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.
To install Set::Groups, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Set::Groups
CPAN shell
perl -MCPAN -e shell install Set::Groups
For more information on module installation, please visit the detailed CPAN module installation guide.