加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – system()返回的值是否与“$?”相同?

发布时间:2020-12-15 21:12:26 所属栏目:大数据 来源:网络整理
导读:当我在Perl中执行system()调用时,我通常会根据 perldocs检查返回代码.大部分时间$rc!= 0对我来说已经足够了.最近我帮了两个人,在apache下运行.cgi脚本时遇到了系统()调用问题.我指示他们检查$rc my $rc = system(...); 并将它们链接到system()文档.然后我看
当我在Perl中执行system()调用时,我通常会根据 perldocs检查返回代码.大部分时间$rc!= 0对我来说已经足够了.最近我帮了两个人,在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 coredumpn",($? & 127),($? & 128) ? 'with' : 'without';
}
else {
    printf "child exited with value %dn",$? >> 8;
}

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

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

我看过system,wait和$?的文档,但对我来说还不是很清楚.过去15年里我使用$rc做错了吗?

解决方法

是的,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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读