У вас есть проблема с приоритетом.
$homologue_gap =~ m/-/ ? $homologue = $homologue_gap : $flag = 1;
означает
( $homologue_gap =~ m/-/ ? ( $homologue = $homologue_gap ) : $flag ) = 1;
, но вы хотите
$homologue_gap =~ m/-/ ? ( $homologue = $homologue_gap ) : ( $flag = 1 );
Это неправильное использование условного оператора,Если вы не используете возвращаемое значение, гораздо лучше (понятнее) использовать оператор if
.
if ($homologue_gap =~ m/-/) { $homologue = $homologue_gap } else { $flag = 1 }
Тем не менее, этот тип шаблона используется довольно редко.Я подозреваю, что можно было бы придумать что-то более ясное, если бы у нас был доступ к окружающему коду.