“?:” if语句中的变量赋值

时间:2018-11-30 14:14:03

标签: perl

我要在?中重新分配“ $ 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 :(得分: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 }

也就是说,这种模式很少使用。我怀疑如果可以访问周围的代码,可以设计出更清晰的东西。