【问题标题】:Perl one-liner if else logicPerl 单线 if else 逻辑
【发布时间】:2012-05-17 05:36:27
【问题描述】:

我正在评估某些变量是否与预期值匹配。这些变量由某个程序在内存中设置,其值可以通过自定义程序从 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 逻辑?

【问题讨论】:

    标签: perl


    【解决方案1】:

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

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

    或者使用这样的显式块:

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

    【讨论】:

      【解决方案2】:

      这部分:

      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 单行将无法工作。还要注意-l 开关,它为您的打印添加一个换行符,这是我假设您想要的。否则你的输出会是这样的:

      TrueTrueTrueFalseTrueFalse
      

      【讨论】:

      • 我意识到 OP 并没有以换行符结尾,但这并不是真正的犹太教。我会使用perl -F: -lane'...'
      • @ikegami 1:是的,2:我知道,刚刚修好了。
      【解决方案3】:

      你可以这样做:

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

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

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

      【讨论】:

      • 这个答案是最好的,因为添加了“n”标志。没有它,匹配将无法按预期进行。
      【解决方案4】:

      没有,除非使用三元?: 运算符; foo if bar 语法不支持 else。

      【讨论】:

      • 我认为你的意思是 三元 运算符 ;o)
      • 我不知道许多具有多个三元运算符的计算机语言;语法太烦人,无法解析。
      • 学究会拯救我们所有人,我明白了。也许我认为习惯的用法胜过迂腐的用法?
      • @ikegami,我的立场是正确的。是的,我想三元运算符是一个通用术语,它接受三个参数,就像'+'和'-'是二元运算符。不要以为我遇到过 (m) 任何其他三元运算符。
      • “没有列表,更不用说带有限制原型的突变列表”是一种奇怪的说法“只有一个”。
      猜你喜欢
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2011-03-24
      • 2015-10-12
      相关资源
      最近更新 更多