Perl - 连接非空字符串

时间:2015-06-26 21:41:30

标签: string perl if-statement concatenation

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

Year
Make
Model
Color
ColorLower
Style

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

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

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

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

谢谢大家。

2 个答案:

答案 0 :(得分:5)

也许是这样的:

$desc = join ' ', grep { length $_ > 0 }
  $Year, $Make, $Model, $Color, $ColorLower, $Style;

答案 1 :(得分:1)

不需要长度测试。空字符串是 false ,因此这将起作用

$desc = join ' ', grep $_, $year, $make, $model, $color, $color_lower, $style;

值得指出的是,大写字母是为Perl全局标识符保留的,例如包名。对于那些没有英语作为第一语言的人来说,混合大小写标识符也特别困难,Wikipedia has this to say

  

“至少有一项研究发现,读者可以比CamelCase更快地识别蛇案例值