Perl one-liner if else逻辑

时间:2012-05-08 17:41:08

标签: 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逻辑?

4 个答案:

答案 0 :(得分:13)

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

perl -e 'print /on/ ? "True" : "False"'

或者使用这样的显式块:

perl -e 'if ( /on/ ) { print "True" } else { print "False" }'

答案 1 :(得分:3)

这部分:

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

可以在perl中处理(如果我记得awk正确的话):

perl -F/:/ -lane 'print $F[0] =~ /on/ ? "True" : "False"'

请注意-n开关的使用,如果没有这个开关,perl one-liner将无效。另请注意-l开关,它会为您的打印添加换行符,这是我认为您想要的。否则你的输出将是:

TrueTrueTrueFalseTrueFalse

答案 2 :(得分:1)

除非使用三元?:运算符,否则不会; foo if bar语法不支持else

答案 3 :(得分:1)

你可以这样做:

 ... | perl -ne 'print /on/ ? "True" : "False"'

但请不要!你最好这样做:

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