Присвоение переменной в операторе "?:" If - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу переназначить "$ homologue" в пределах?: заявление и избегайте использования флага для достижения этого, то есть делайте это напрямую.Выход «1», а не AGFTVASTGHAVFEW - SAC.Помощь приветствуется.

#!/usr/local/bin/perl
use warnings;
use strict;
use feature qw(say switch);
my $homologue;
my $homologue_gap = "AGFTVASTGHAVFEW--SAC";
my $flag = 0;

$homologue_gap =~ m/-/ ? $homologue = $homologue_gap : $flag = 1; 
say $homologue;
__DATA__
**Output** 
1
**Output sought** 
AGFTVASTGHAVFEW--SAC

Справочная информация, я извлекаю гомологичные олигопептиды в выравнивании и учитываю любые остатки, которые могут присутствовать (символ "-").

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Вы можете быть немного умнее с оператором ?:

($homologue_gap =~ m/-/ ? $homologue : $flag) = ($homologue_gap =~ m/-/ ? $homologue_gap : 1);
0 голосов
/ 01 декабря 2018

У вас есть проблема с приоритетом.

$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 }

Тем не менее, этот тип шаблона используется довольно редко.Я подозреваю, что можно было бы придумать что-то более ясное, если бы у нас был доступ к окружающему коду.

0 голосов
/ 30 ноября 2018

Вам нужно как минимум еще один набор скобок вокруг $flag = 1 - : имеет более высокий приоритет, чем =

$ perl -MO=Deparse,-p -e '$a ? $b=1 : $c=2'
(($a ? ($b = 1) : $c) = 2);

$ perl -MO=Deparse,-p -e '$a ? $b=1 : ($c=2)'
(($a ? ($b = 1) : ($c = 2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...