gpt4 book ai didi

perl - system() 返回的值是否与 "$?"相同?

转载 作者:行者123 更新时间:2023-12-03 22:32:36 25 4
gpt4 key购买 nike

当我这样做时 system()在 Perl 中调用,我通常根据 perldocs 检查返回码.嗯,我是这么想的。大部分时间 $rc!=0对我来说已经足够了。最近我在这里帮助了两个遇到问题的人system()在 apache 下运行他们的 .cgi 脚本时调用。我指示他们检查 $rc

my $rc = system(...);

并将它们链接到 system()文档。然后我仔细看了看,发现文档并不是真正在谈论 $rc而是关于 $?我感到有点尴尬,出现了以下问题:

是否有区别:
system(...);
if ($? == -1) {
print "failed to execute: $!\n";
}
elsif ($? & 127) {
printf "child died with signal %d, %s coredump\n",
($? & 127), ($? & 128) ? 'with' : 'without';
}
else {
printf "child exited with value %d\n", $? >> 8;
}


my $rc = system(...);
if ($rc == -1) {
print "failed to execute: $!\n";
}
elsif ($rc & 127) {
printf "child died with signal %d, %s coredump\n",
($rc & 127), ($rc & 128) ? 'with' : 'without';
}
else {
printf "child exited with value %d\n", $rc >> 8;
}

或者,简而言之,是 $rc等于 $?system() ?

我查看了 system 的文档, wait , 和 $?但我不太清楚。在过去的 15 年里,我使用 $rc 做错了吗? ?

最佳答案

是的,返回值 system 应该等于 $? .

然而自从 $?不仅适用于system电话和 $?是一个全局变量,它可能会被正在发生的其他操作覆盖。来自 perldoc -v '$?'这些包括:

$CHILD_ERROR

$?

The status returned by the last pipe close, backtick ("``") command, successful call to "wait()" or "waitpid()", or from the "system()" operator.



立即存储值然后比较更安全:
my $rc = system('ls myfile.txt');
if ( $rc >> 8 != 0 ) {
# do something because ls exited with an error
}

关于perl - system() 返回的值是否与 "$?"相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36141150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com