【发布时间】:2011-07-11 14:03:34
【问题描述】:
我改变后:
system("recode ISO-8859-1..UTF-8 $csvPath");
if($? == -1) {
die(" failed\n");
}
到:
if(system("recode ISO-8859-1..UTF-8 $csvPath")) {
die(" failed!");
}
效果更好,但并非总是如此。
代码sn-p:
print("recoding file to utf-8...");
#`recode ISO-8859-1..UTF-8 $csvPath`;
system("recode ISO-8859-1..UTF-8 $csvPath");
if($? == -1) {
die(" failed\n");
}
print(" done!\n");
这种情况并不总是发生。有时有效,有时无效。
如果它不起作用(在这种情况下脚本没有完成),第一个打印工作,但第二个打印“完成!”即使外部命令有效,也永远不会打印。
【问题讨论】:
-
在我看来,如果脚本运行到结束,打印应该会发生。剧本写完了吗?在此上下文中的重要信息是您使用的是什么操作系统,以及您使用的是什么外壳。
-
不,脚本没有完成。该系统是 GNU/Linux。用户有 bash shell。
-
好吧,
system调用等待子进程完成,所以看起来这就是你的问题所在。阅读documentation for system。 -
另外,我怀疑这更多是 linux/Unix 标签的问题,如果有,请重新编码。
-
@peko,有三种可能性。 1)
die或print已执行,而您只是没有注意到(由于缓冲或异常捕获或其他原因)。 2)system没有返回,因为孩子没有结束。 3) Perl 进程被杀死(例如被信号)。