Во-первых, у вас есть проблема с приоритетом.
!$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 .