Perl代码中的错误

时间:2013-12-16 11:26:56

标签: perl

尽管参数中存在的所有标量值都具有正确的值,但由于$rc值,此部分代码仍然失败。我不确定$rc值是如何得到的这里计算。

@args = ("$isql_exe", "-U$user", "-P$password", "-S$server", 
         "-D$database", "-i$tmp_sql_file", "-o$tmp_err_file");  

print $log_file "Truncating stage tables\n";
$rc = 0xffff & system (@args); # <--- what this does?

if ($rc != 0) {
    $rc &= 0x00ff;
    print $log_file "Error Executing SQL command script $rc $?\n";
    $rc = 1;
} ## end if

请提出建议。

1 个答案:

答案 0 :(得分:3)

$rc = 0xffff & system (@args);非常错误。

$ perl -E'say system("non-existent")'
-1

$ perl -E'say 0xFFFF & system("non-existent")'
65535

这段代码要好得多:

system(@args);

my $rc = 0;
if    ($? < 0   ) { $rc=1; print $log_file "Error Executing SQL command script: $!\n"; }
elsif ($? & 0x7F) { $rc=1; print $log_file "SQL command script killed by signal ".( $? & 0x7F )."\n"; }
elsif ($? >> 8  ) { $rc=1; print $log_file "SQL command script exited with error ".( $? >> 8 )."\n"; }

它更好,因为它不会将$rc用于多种用途;它更准确地报告错误;而且阅读起来要清楚得多。

对于$? 65280,它会说exited with error 255。退出代码特定于给予它们的程序,并且除了零或非零之外通常没有意义。这就是他们打印错误信息的原因。