Perl - 连接非空字符串

Mar*_*ord 0 string perl if-statement concatenation

我需要帮助"优化"我的代码,因为我确信有一种更好,更清洁的方法.我有6个变量是通过从较长的字符串中解析而创建的:

Year
Make
Model
Color
ColorLower
Style
Run Code Online (Sandbox Code Playgroud)

根据记录,我可能会在部分或全部变量中包含详细信息.但在大多数情况下,有些是空白的.在填充变量之后,我将它们添加到数据库字段中,该字段是汽车/车辆的描述.

目前我的if/else块逐个进行,如果变量的长度非零,则为连接的描述变量

if (length($Year)>0)
{
    $Description == $Description + " " + Year
}
elsif (length($Make) > 0)
    $Description == $Description + " " + $Make
}   ...and so on
Run Code Online (Sandbox Code Playgroud)

TMTOWTDI绝对适用于此,我总是惊叹于专家提出的优雅的单行.虽然我现在的工作正在进行,但我有兴趣听到有一种更短,更紧凑的方式,我可以最大化我的代码.

谢谢大家.

Jim*_*vis 5

也许是这样的:

$desc = join ' ', grep { length $_ > 0 }
  $Year, $Make, $Model, $Color, $ColorLower, $Style;
Run Code Online (Sandbox Code Playgroud)

  • `join'',grep length> 0,$ Year,$ Make,$ Model,$ Color,$ ColorLower,$ Style`也可以. (2认同)
  • 不需要`> 0`测试.长度不能为负,而Perl中的0为false.`grep {length $ _}`会更加惯用. (2认同)