2

我想在 a 中重新分配“$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

背景,我在比对中提取同源寡肽,并考虑可能存在的任何插入缺失(“-”字符)。

4

3 回答 3

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));
于 2018-11-30T14:22:07.653 回答
3

你可以对?:操作员有点聪明

($homologue_gap =~ m/-/ ? $homologue : $flag) = ($homologue_gap =~ m/-/ ? $homologue_gap : 1);
于 2018-11-30T14:50:06.247 回答
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 }

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

于 2018-12-01T01:54:41.043 回答