Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String Perl-连接非空字符串_String_Perl_If Statement_Concatenation - Fatal编程技术网

String Perl-连接非空字符串

String Perl-连接非空字符串,string,perl,if-statement,concatenation,String,Perl,If Statement,Concatenation,我需要一点帮助来“优化”我的代码,因为我相信有更好、更干净的方法可以做到这一点。我有6个变量,它们是从较长的字符串中解析出来的: Year Make Model Color ColorLower Style 根据记录,我可能有一些或所有这些变量的详细信息。不过,在大多数情况下,有些是空白的。在填充变量之后,我将它们添加到一个数据库字段中,该字段是汽车/车辆的描述 当前,我的if/else块一个接一个地执行,如果变量的长度不为零,则连接的描述变量 if (length($Year)>0)

我需要一点帮助来“优化”我的代码,因为我相信有更好、更干净的方法可以做到这一点。我有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在这里绝对适用,我总是惊叹于专家们提出的优雅的一句话。虽然我现在所做的工作正在进行中,但我感兴趣的是,有一种更短、更紧凑的方法可以最大化我的代码


谢谢大家。

也许是这样的:

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

也许是这样的:

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

没有必要进行长度测试。空字符串为false,因此这将起作用

$desc = join ' ', grep $_, $year, $make, $model, $color, $color_lower, $style;
还值得指出的是,大写字母是为Perl全局标识符(如包名)保留的。对于那些没有英语作为第一语言的人来说,混合大小写标识符也特别困难

“至少有一项研究发现,读者能够比
CamelCase
更快地识别蛇形案例的价值”


没有必要进行长度测试。空字符串为false,因此这将起作用

$desc = join ' ', grep $_, $year, $make, $model, $color, $color_lower, $style;
还值得指出的是,大写字母是为Perl全局标识符(如包名)保留的。对于那些没有英语作为第一语言的人来说,混合大小写标识符也特别困难

“至少有一项研究发现,读者能够比
CamelCase
更快地识别蛇形案例的价值”



可能有多种方法可以进行字符串连接,但使用
+
不是其中之一。赋值的方法也不是
=
。您还有一个逻辑错误:由于您使用的是
elsif
,因此只有第一个非空字段将附加到
$Description
。我想这只是伪代码,我是个笨蛋。。对于这个应用程序,我在C#和Perl之间来回奔波,本周我做到了最好。事实上,我是C#的,因此出现了巨大的格式错误。原谅我,伙计们。。。很抱歉,真正的解决办法当然是在数据库中拆分这些字段。像这样存储连接的值违反1NF。可能有多种方法可以进行字符串连接,但使用
+
不是这些方法之一。
==
也不是分配值的方法。您还存在一个逻辑错误:只有第一个非空字段将附加到
$Description
,因为您使用的是
elsif
。我想这只是伪代码,我是个笨蛋。。对于这个应用程序,我在C#和Perl之间来回奔波,本周我做到了最好。事实上,我是C#的,因此出现了巨大的格式错误。原谅我,伙计们。。。很抱歉,真正的解决办法当然是在数据库中拆分这些字段。像这样存储连接的值违反了1NF。
join“”、grep length>0、$Year、$Make、$Model、$Color、$ColorLower、$Style
也可以。很好的解决方案。。一旦我弄清楚我今天要用什么语言编写代码,我就会实现它。我相信其他人会从这些妙语中找到美。谢谢没有必要进行
>0
测试。长度不能为负数,在Perl中0为false
grep{length${code}
会更惯用。@cjm:这一点很好,所以
join',grep length,$Year,
就足够了。
join',grep length>0,$Year,$Make,$Model,$ColorLower,$Style
也可以。很好的解决方案。。一旦我弄清楚我今天要用什么语言编写代码,我就会实现它。我相信其他人会从这些妙语中找到美。谢谢没有必要进行
>0
测试。长度不能为负数,在Perl中0为false
grep{length$\u}
会更惯用。@cjm:Good point所以
join',grep length,$Year,
就足够了。字符串
0
也是false。根据名称,这些变量不太可能是0,但通常最好是说
length
,而这正是您的意思。字符串
0
也是false。根据名称,这些变量不太可能是0,但通常最好是说
length
,这就是您的意思。