我有参数传递给函数,调用函数不是最初调用它的函数将控制权返回问题。基本上,我正在阅读包含用户名和密码到数组中的文本文件。然后使用foreach循环,我将用户名和密码传递给另一个函数,但是这永远不会返回并且只执行一组arugments;为什么调用Perl的exec内建函数会导致此函数不返回到调用者?
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");
}
基本上,不要担心AddUser函数的作用。它只是运行一些.sh文件,做一些我不关心的东西。目前,我只能从我读入的文件中添加一个用户。此代码只能工作一次,不会返回到“批处理”功能。
我已经尝试添加“返回()”到“ADDUSERS”功能的结束,但这并不能帮助
感谢
arghhhh! *踢自己*非常感谢你。如果我想用反引号来执行这个命令呢?我希望能够捕获.sh命令的输出。 :) – microfly7 2010-11-07 12:36:34
@ microfly7,我在Perl中这样做的通常方式是采用开放式管道变体 - 请参阅更新。 – paxdiablo 2010-11-07 12:42:23
*且从不返回*应以斜体显示。 – tchrist 2010-11-07 13:17:16