J'ai des problèmes avec la transmission d'arguments à une fonction et la fonction appelée ne retourne pas le contrôle à la fonction qui l'a initialement appelée. Fondamentalement, je lis dans un fichier texte qui contient des noms d'utilisateur et des mots de passe dans un tableau. Ensuite, en utilisant une boucle foreach, je passe le nom d'utilisateur et le mot de passe à une autre fonction mais cela ne retourne jamais et ne s'exécute que pour un ensemble de règles;Pourquoi appeler l'exécutif de Perl fait que cette fonction ne retourne pas à son appelant?
sub batch {
open(my $in, "<", "$ARGV[0]") or die "Can't open $ARGV[0]: $!";
#Read file contents into an array.
@listOfUsers = <$in>;
foreach $listOfUsers (@listOfUsers) {
#Regex to check if txt file conforms to correct syntax.
if ($listOfUsers !~ /([a-zA-Z]{1}[a-zA-Z0-9]{3,40})\s[a-zA-Z]{1}[a-zA-Z0-9]{3,40}/) {
print "Please ensure that line $listOfUsers in $ARGV[0] is of the following syntax:\n";
print "\n<USERNAME> <PASSWORD>\n";
exit(0);
} else {
#split string and call AddUser function
my ($username, $password) = split(" ",$listOfUsers);
AddUser($username, $password);
}
}
}
sub AddUser {
exec("infacmd.sh createUser -dn domain -un user -pd pass -hp domain:80 -nu " . $_[0] . " -np " . $_[1] . " -nf test");
}
Fondamentalement, ne vous inquiétez pas de ce que fait la fonction AddUser. Il fonctionne juste un fichier .sh qui fait des choses que je ne suis pas concerné. Actuellement, je ne peux ajouter qu'un utilisateur du fichier que j'ai lu. ce code ne fonctionne qu'une seule fois et ne retourne pas à la fonction 'batch'.
J'ai essayé d'ajouter « retour() » à la fin de la fonction « AddUsers », mais cela ne suffit pas
Merci
arghhhh !!! * coups de pied auto * merci à vous deux. Que faire si je veux utiliser des backticks pour exécuter cette commande à la place? Je veux être en mesure de capturer la sortie de la commande .sh. :) – microfly7
@ microfly7, la façon habituelle de faire cela en Perl est avec la variation open-with-pipe - voir la mise à jour. – paxdiablo
Le * et ne revient jamais * doit être en italique. – tchrist