我要在?中重新分配“ $ 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
背景,我正在提取比对中的同源寡肽,并考虑可能存在的插入缺失(“-”字符)。
答案 0 :(得分:3)
您还需要在$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));
答案 1 :(得分:3)
通过?:
运算符,您可以变得聪明
($homologue_gap =~ m/-/ ? $homologue : $flag) = ($homologue_gap =~ m/-/ ? $homologue_gap : 1);
答案 2 :(得分:2)
您遇到了优先事项。
$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 }
也就是说,这种模式很少使用。我怀疑如果可以访问周围的代码,可以设计出更清晰的东西。