【发布时间】:2010-03-18 11:46:03
【问题描述】:
我是 Perl 的初学者,但在使用“系统”调用时遇到了一些麻烦。这是我尝试执行 2 个 shell 命令的一小段代码:
# First command is :
# dot -Tpng $dottmpfile > $pngfile
# Second command is :
# rm $dottmpfile
if (!($pngfile eq "")) {
my @args = ("dot", "-Tpng", $dottmpfile, " > ", $pngfile);
system (join (' ' , @args ))
or die "system @args failed : $!";
unlink $dottmpfile;
}
编辑:这是我现在的代码,但我仍然收到错误:
system dot -Tpng toto.dot > toto.png failed : Inappropriate ioctl for device at /home/claferri/bin/fractal.pl line 79.
我使用system 生成了这段代码。
【问题讨论】:
-
如果你只是想让它快速运行,请将整行合并为一个字符串并在其周围加上反引号:即 $result = `dot -Tpng $dottmpfile > $pngfile`;
-
见这里:stackoverflow.com/questions/2461472/…。此外,要删除文件,请使用
unlink()。无需调用系统rm -
你应该使用 $!而不是 $? - 这会给你错误信息而不是错误代码,而且几乎总是会告诉你出了什么问题。
-
您是收到错误消息还是只是想让您的代码更简洁?
-
@PP 将列表与单个字符串传递给
system(或qx)之间存在关键区别。