我正在尝试在脚本中编写更高效的代码,并且有时会实现三元条件运算符。我不明白为什么在循环中使用三元条件运算符时会得到额外的结果:
#!/usr/bin/perl
use strict;
use warnings;
my @array = ('Serial = "123"', 'Serial = "456"', 'Serial = "789"');
my ($test1,$test2);
foreach my $a (@array){
!$test1 ? $test1 = $a : $test1 .= " AND " . $a;
}
foreach my $b (@array){
if (!$test2) {
$test2 = $b
} else {
$test2 .= " AND " . $b;
}
}
print "Test1: $test1\n";
print "Test2: $test2\n";
Output:
~/bin/test.pl
Test1: Serial = "123" AND Serial = "123" AND Serial = "456" AND Serial = "789"
Test2: Serial = "123" AND Serial = "456" AND Serial = "789"
Test1 输出有一个额外的“Serial =”123”,我做错了什么?
首先,你有一个优先级问题。
!$test1 ? $test1 = $a : $test1 .= " AND " . $a;
means
( !$test1 ? $test1 = $a : $test1 ) .= " AND " . $a;
可以用括号解决。
my $test1;
for (@array) {
!$test1 ? ($test1 = $a) : ($test1 .= " AND " . $a);
}
但这是不可读的。你显然走错了方向!有两项任务正在执行,而您正试图将它们合并为一项。简单地将它们分开可以使代码更具可读性。
my $test1;
for (@array) {
$test1 .= ' AND ' if $test1;
$test1 .= $_;
}
但我们还没有到那一步。让我把你介绍给join http://perldoc.perl.org/functions/join.html.
my $test1 = join(' AND ', @array);
好多了!
最后,看起来您确实正在构建一条 SQL 语句。如果是这样,您的问题就没有意义,因为您应该使用占位符将数据传输到数据库。搜索DBI http://search.cpan.org/perldoc?DBI该词的文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)