my %MODES; ${MODES}{"start"}{function} = \&startChroot; ${MODES}{"start"}{data} = \$start; ${MODES}{"stop"}{function} = \&stopChroot; ${MODES}{"stop"}{data} = \$stop; ${MODES}{"reset"}{function} = \&resetChroot; ${MODES}{"reset"}{data} = \$reset; ${MODES}{"delete"}{function} = \&deleteChroot; ${MODES}{"delete"}{data} = \$delete; for(sort(keys(%MODES))) { my $mode = $_; if (defined(${ ${MODES}{$mode}{data} }) && ${ ${MODES}{$mode}{data} } ne "") { my @CHROOTS = split(",", ${ ${MODES}{$mode}{data} }); for (@CHROOTS) { my $name = $_; if ($name =~ /all/) { foreach my $user (keys(%CHROOT)) { foreach my $chrootname (keys( %{ ${CHROOT}{$user} } )) { &{ ${MODES}{$mode}{function} }($user, $chrootname) or die "operation failed for $user:$chrootname"; } } } else { foreach my $chrootname (keys( %{ ${CHROOT}{$name} } )) { &{ ${MODES}{$mode}{function} }($name, $chrootname) or die "operation failed for $name:$chrootname"; } } } } } exit;