mic*_*ly7 1 perl return function exec
我在向函数传递参数时遇到问题,而被调用的函数没有将控制权返回给最初调用它的函数.基本上,我正在读取一个文本文件,其中包含用户名和密码到数组中.然后使用foreach循环我将用户名和密码传递给另一个函数,但这永远不会返回,只执行一组arugments;
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");
}
Run Code Online (Sandbox Code Playgroud)
基本上,不要担心AddUser函数的作用.它只运行一些.sh文件,它做了一些我不关心的东西.目前,我只能从我读入的文件中添加一个用户.即此代码仅工作一次,不会返回"批处理"功能.
我尝试将'return()'添加到'AddUsers'函数的末尾,但这没有帮助
谢谢
pax*_*blo 11
exec永远不会回来 与UNIX C中的等效调用系列一样,它将当前进程替换为您指定的进程.你想要的system.
从那些页面:
exec:
该exec函数执行系统命令,永不返回 ; 使用system而不是exec如果你想要它返回.它失败并仅在命令不存在时返回false并且它是直接执行而不是通过系统的命令shell执行.system:
完全相同的事情exec,除了先完成fork,父进程等待子进程退出.
如果要捕获程序的标准输出,可以使用open-with-pipe变量:
open (HNDL, "myprogram |") || die "Cannot execute.";
while (<HNDL>) {
# Do something with each line.
}
close (HNDL);
Run Code Online (Sandbox Code Playgroud)
以下脚本显示了如何123从特定命令(ls -al xx*在本例中)中搜索包含特定字符串(在本例中)的行:
pax> ls -al xx*
-rw-r--r-- 1 pax None 10 2010-06-13 19:51 xx
-rw-r--r-- 1 pax None 123 2010-05-05 23:39 xx.py
pax> cat qq.pl
open (HNDL, "ls -al xx* |") || die "Cannot execute.";
while (<HNDL>) {
if (/123/) {
print;
}
}
close (HNDL);
pax> perl qq.pl
-rw-r--r-- 1 pax None 123 2010-05-05 23:39 xx.py
Run Code Online (Sandbox Code Playgroud)