“的语法;捕捉;批处理中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;

我想批量存储返回的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;
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);