Perl:系统返回代码是256,而不是0

Perl:系统返回代码是256,而不是0,perl,system,return-value,Perl,System,Return Value,我有一个oneliner(Windows 7/10上的perl 5): 这给了我预期的产出: c:\users 0 但如果我有这个: C:\Windows>perl -e "$x=system('explorer c:\users');print $x"; 这给了我: 256 然后打开文件夹 我很好奇为什么输出不是0,因为命令执行正确 类似的问题也存在,但没有得到回答。这个问题更具体。也许有人能回答这个问题 更新1: (1) 我更正了从c:\user到c:\users的路径。前一个路

我有一个oneliner(Windows 7/10上的perl 5):

这给了我预期的产出:

c:\users
0
但如果我有这个:

C:\Windows>perl -e "$x=system('explorer c:\users');print $x";
这给了我:

256
然后打开文件夹

我很好奇为什么输出不是0,因为命令执行正确

类似的问题也存在,但没有得到回答。这个问题更具体。也许有人能回答这个问题

更新1:

(1) 我更正了从c:\user到c:\users的路径。前一个路径错误,文件浏览器C:\Users\giordano\Documents已打开。通过此更正,将打开正确的文件夹,但仍返回256

(2) 更好的编码:

C:\Windows>perl -e "system('explorer c:\users');print $?";
从:

返回值是等待调用返回的程序的退出状态。要获得实际的退出值,请右移8(见下文)

$?
中设置了相同的值,其中:

这只是由传统的Unix wait()系统调用返回的16位状态字(或者是由它组成的)。因此,子流程的退出值实际上是($?>>8),而$?&127给出进程因哪个信号(如果有)而停止,以及$?&128报告是否存在核心转储

还请注意,如果出现fork或exec错误,则可以将其中一个设置为-1(在这种情况下,errno在
$!
中设置)


这意味着当执行第二个命令时,它指示退出状态为1(256>>8)。我不知道在Windows环境中这意味着什么。

这是一个
perl-e“系统('explorer c:\user');print$?”
给出相同的:
256
。文件夹将被打开。我很感兴趣为什么我得到了-1。好的。但为什么是美元?不是0吗?您的命令返回的状态为1,我不知道Windows为什么会这样做。有趣的是,
explorer c:\user
后跟
echo%errorlevel%
--
cmd
echo$?
--输出
0
@ikegami这使它更奇怪和神秘。
C:\Windows>perl -e "system('explorer c:\users');print $?";