“的语法;捕捉;批处理中Perl脚本的返回值?
我想批量存储返回的perl值。我如何做到这一点“的语法;捕捉;批处理中Perl脚本的返回值?,perl,batch-file,return,Perl,Batch File,Return,我想批量存储返回的perl值。我如何做到这一点 Batch Code: FOR /F "delims=" %%I IN ('perl.exe c:\TestProp1noRefCases.pl 859') DO set lineCase=%%I echo !lineCase! ::Nothing is outputted Perl Code: use strict; use warnings; sub main1; my $arg1 =shift; main1($arg1); exit;
Batch Code:
FOR /F "delims=" %%I IN ('perl.exe c:\TestProp1noRefCases.pl 859') DO set lineCase=%%I
echo !lineCase! ::Nothing is outputted
Perl Code:
use strict;
use warnings;
sub main1;
my $arg1 =shift;
main1($arg1);
exit;
sub main1
{
#Returns 1,2,3 Depending on testNum passed
my @gp1= (829,845,851,859,864,867);
my @gp2= (861,863,865);
# my @gp4= (826-828,830-839,843-844,847-850,852-854,860-862,883);
# my @gp3= (877-882,884);
my $val1=1;
my $val2=2;
my $val3=3;
my $val4=4;
if((grep /^$arg1$/,@gp1) || ($arg1 >=822 && $arg1<=824))
{
# print "$val1\n";
return $val1;
} elsif ((grep /^$arg1$/,@gp2) || ($arg1>=855 && $arg1<=858))
{
#print "$val2\n";
return $val2;
} elsif (($arg1==884) || ($arg1>=877 && $arg1<=882))
{
#print "$val3\n";
return $val3;
} else
{
#print "$val4\n";
return $val4;
}
}
批处理代码:
对于('perl.exe c:\TestProp1noRefCases.pl 859')中的/F“delims=“%%I”,请设置lineCase=%%I
回声!lineCase!::没有输出任何内容
Perl代码:
严格使用;
使用警告;
次主要1;
我的$arg1=班次;
main1($arg1);
出口
次主要1
{
#根据传递的testNum返回1,2,3
my@gp1=(829845851859864867);
my@gp2=(861863865);
#my@gp4=(826-828830-839843-844847-850852-854860-862883);
#my@gp3=(877-882884);
我的$val1=1;
我的$val2=2;
我的$val3=3;
我的$val4=4;
如果((grep/^$arg1$/,@gp1)| |($arg1>=822&&$arg1=855&&$arg1=877&&$arg1您没有带着返回值退出
而不是
main1($arg1);
exit;
尝试:
或:
然后检查批处理中的%ERRORLEVEL%
perl.exe c:\TestProp1noRefCases.pl 859
set lineCase=%ERRORLEVEL%
编辑:注意,这只适用于小的无符号整数,如示例中的$val1..$val4
。您从未实际打印要捕获的值。更改
main1($arg1);
到
我不熟悉echo!lineCase!
。如果这样不行,可以使用echo%lineCase%
。
perl.exe c:\TestProp1noRefCases.pl 859
set lineCase=%ERRORLEVEL%
main1($arg1);
print main1($arg1);