今天在开发Perl脚本的时候遇到了一个问题:qualcomm给出的samples中的代码都用ARGV数组的元素个数来进行判断,代码如下:
sub ParseArguments { # Assume failure my $RC = false; my $Txt = ""; my $Help = "Syntax: Perl grep_isf.pl <Input_ISF_File.isf> <string_to_be_searched> " . "Eg: Perl grep_isf.pl s1.isf "MC_RESET|jammer in max bin" "; if ($#ARGV < 0) { print " $Help "; return $RC; } my $ISFFileName = $ARGV[0]; if ($ISFFileName eq "") { $Txt = "Invalid ISF file name " . $Help; print " $Txt"; return $RC; } $ISFAbsolutePath = GetPathFromScript(); if ($ISFAbsolutePath eq "") { $Txt = "Invalid ISF file name " . $Help; print " $Txt"; return $RC; } else { $ISFAbsolutePath .= $ISFFileName; } $SearchString = $ARGV[1]; if ($SearchString eq "") { $Txt = "Invalid Search String " . $Help; print " $Txt"; return $RC; } # Success $RC = true; return $RC; }
但是穷尽了一生也没有找到ARGV的声明,这时候郭宏跑过来和我抱怨这个东西运行不了,我就随手查了查,才发现别有洞天。
ARGV其实是主函数默认的两个参数之一,数组中存储的是指令的详细内容。
举个例子: 我们写好了hello.exe 一般都是直接运行,没有添加任何的参数。但是作为一个合格的EXE,它是可以通过命令行来添加参数的,比如我们可以执行:hello.exe a b c d e
这样ARGV数组中的存储内容如下:
argv[0] = hello.exe;
argv[1] = a;
argv[2] = b;
argv[3] = c;
argv[4] = d;
argv[5] = e;
所以我觉得这个automation 脚本和QXDM之前的关系应该是通过命令行的参数和命令联系起来的。下午再想想,吃饭去