gpt4 book ai didi

Perl 三元条件运算符

转载 作者:行者123 更新时间:2023-12-03 18:13:11 29 4
gpt4 key购买 nike

我正在尝试在我的脚本中编写更高效的代码,并且有时会实现三元条件运算符。我不明白为什么在循环中使用三元条件运算符时会得到额外的结果:

#!/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";

输出:
~/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;

方法
( !$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 .
my $test1 = join(' AND ', @array);

好多了!

最后,看起来您正在构建一条 SQL 语句。如果是这样,您的问题没有实际意义,因为您应该使用占位符将数据传输到数据库。搜索 DBI该词的文档。

关于Perl 三元条件运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9075116/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com