尽管参数中存在的所有标量值都具有正确的值,但由于$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
请提出建议。
答案 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
。退出代码特定于给予它们的程序,并且除了零或非零之外通常没有意义。这就是他们打印错误信息的原因。