Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl一行if-else逻辑_Perl - Fatal编程技术网

Perl一行if-else逻辑

Perl一行if-else逻辑,perl,Perl,我正在评估某些变量是否与预期值匹配。变量由特定程序在内存中设置,其值可以通过自定义程序从shell访问 我将shell命令的输出通过管道传输到awk,以获得我想要的特定字段,然后通过perl运行它,查看它是否与预期值匹配。比如说, ysgrp autostart | awk -F\: '{print $1}' | perl -e 'print {"True"} else {print "False"} if /on/' 然而,perl对“}else”附近的编译错误表示不满。如何处理perl一行

我正在评估某些变量是否与预期值匹配。变量由特定程序在内存中设置,其值可以通过自定义程序从shell访问

我将shell命令的输出通过管道传输到awk,以获得我想要的特定字段,然后通过perl运行它,查看它是否与预期值匹配。比如说,

ysgrp autostart | awk -F\: '{print $1}' | perl -e 'print {"True"} else {print "False"} if /on/'

然而,perl对“}else”附近的编译错误表示不满。如何处理perl一行程序中的if/then/else逻辑?

除了使用三元
?:
运算符外,其他人不处理;
foo if bar
语法不支持
else

您可以执行以下操作:

 ... | perl -ne 'print /on/ ? "True" : "False"'
但是请不要!你最好做:

... | grep -qF on && echo True || echo False

不能在后缀条件中使用
else
条件。您可以使用如下三元条件运算符:

perl -e 'print /on/ ? "True" : "False"'
perl -e 'if ( /on/ ) { print "True" } else { print "False" }'
或者像这样使用显式块:

perl -e 'print /on/ ? "True" : "False"'
perl -e 'if ( /on/ ) { print "True" } else { print "False" }'
本部分:

awk -F\: '{print $1}' | perl -e 'print {"True"} else {print "False"} if /on/'
可以用perl处理(如果我正确地记住了awk):

请注意使用了
-n
开关,没有它,perl one liner将无法工作。还要注意
-l
开关,它在打印中添加了一个换行符,我想这是您想要的。否则,您的输出将类似于:

TrueTrueTrueFalseTrueFalse

我想你指的是三元运算符;o) 我不知道有多少计算机语言有多个三元运算符;语法太烦人了,无法解析。我明白了,学究会拯救我们所有人。也许我认为习惯用法胜过迂腐的用法?@ikegami,我认为正确。是的,我想三元运算符是一个通用术语,它包含三个参数,就像“+”和“-”是二元运算符一样。不要认为我遇到过(m)任何其他三元运算符。“没有listops,更不用说带有限制性原型的变种listops”是一种奇怪的说法“只有一个”。这个答案最好是因为添加了“n”标志。如果没有它,匹配将不会像预期的那样工作。我意识到OP没有以一个新行结束,但这不是真正的犹太教。我会使用
perl-F:-lane'.''.
@ikegami 1:True,2:I知道,刚刚修复了它。