#!/usr/bin/perl
use warnings;
system ("dialog --menu Customize 10 70 50 'Flush rules' 'Clear all the rules' 'Show rules' 'Shows the current rules' 2> /tmp/tmp.txt ")
我想以更易读的形式编写上面的代码,比如
#!/usr/bin/perl
use warnings;
system ("dialog --menu Customize 10 70 50
'Flush rules' 'Clear all the rules'
'Show rules' 'Shows the current rules'
'more options' '........' 2> /tmp/tmp.txt ")
我该怎么做?
答案 0 :(得分:5)
Perl提供了一个字符串连接运算符,可用于构建大字符串:
system ( "dialog --menu Customize 10 70 50 "
. "'Flush rules' 'Clear all the rules' "
. "'Show rules' 'Shows the current rules' "
. "'more options' '........' 2> /tmp/tmp.txt ");
答案 1 :(得分:2)
system
可以采用@args
(数组形式):
system ( 'dialog', @args );
答案 2 :(得分:1)
system ( "dialog --menu Customize 10 70 50 "
. "'Flush rules' 'Clear all the rules' "
. "'Show rules' 'Shows the current rules' "
. "'more options' '........' 2> /tmp/tmp.txt ");
Dang,tadmc很快。是的,使用.
连接命令。
我建议您在单独的字符串中创建命令,然后执行该命令。我还建议使用qq
命令进行引用。这样,您就不必担心单引号和双引号:
my $command = qq(dialog --menu Customize 10 70 50 )
. qq("Flush rules" 'Clear all the rules' )
. qq('Show rules' 'Shows the current rules' )
. qq'more options' '........' 2> /tmp/temp.$$ );
my $error = system $command;
使用qq
可以让您不必担心我是否需要使用双引号来允许变量插值或单引号,或者必须转义引号。例如,我能够混合使用双引号和单引号,并且我可以使用Perl变量而不必担心是否必须从单引号更改为双引号。例如,我使用/tmp/temp.$$
。 $$
是进程ID,因此如果执行此命令两次,则会使用两个不同的临时文件。
通过为我的命令创建一个单独的变量,我现在可以在以后使用它 - 就像我的系统命令中有错误一样。
顺便说一句,您应该始终检查system
命令的返回。如果由于某种原因你不能执行你的系统命令,你很可能想要错误或者至少注意到这个问题。
其中一个问题是系统命令的输出与大多数Perl函数相反。在大多数Perl函数中,返回零表示失败,而返回非零表示成功。但是,system
函数恰恰相反。零意味着成功,非零意味着失败。
这可能会导致奇怪的构造:
if (system $command) {
die qq(Can't execute command "$command"\n);
};
这看起来就像我说如果我的系统命令成功,我应该死,但它的确意味着同样如下:
my $error = system $command;
if ($error) {
die qq(Can't execute command "$command"\n);
}
语法上更有意义。